summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/server
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb/server')
-rw-r--r--bitbake/lib/bb/server/process.py46
-rw-r--r--bitbake/lib/bb/server/xmlrpcserver.py11
2 files changed, 25 insertions, 32 deletions
diff --git a/bitbake/lib/bb/server/process.py b/bitbake/lib/bb/server/process.py
index 76b189291d..4b35be62cd 100644
--- a/bitbake/lib/bb/server/process.py
+++ b/bitbake/lib/bb/server/process.py
@@ -321,7 +321,22 @@ class ProcessServer():
321 bb.warn('Ignoring invalid BB_SERVER_TIMEOUT=%s, must be a float specifying seconds.' % self.timeout) 321 bb.warn('Ignoring invalid BB_SERVER_TIMEOUT=%s, must be a float specifying seconds.' % self.timeout)
322 seendata = True 322 seendata = True
323 323
324 ready = self.idle_commands(.1, fds) 324 if not self.idle:
325 self.idle = threading.Thread(target=self.idle_thread)
326 self.idle.start()
327 elif self.idle and not self.idle.is_alive():
328 serverlog("Idle thread terminated, main thread exiting too")
329 bb.error("Idle thread terminated, main thread exiting too")
330 self.quit = True
331
332 nextsleep = 1.0
333 if self.xmlrpc:
334 nextsleep = self.xmlrpc.get_timeout(nextsleep)
335 try:
336 ready = select.select(fds,[],[],nextsleep)[0]
337 except InterruptedError:
338 # Ignore EINTR
339 ready = []
325 340
326 if self.idle: 341 if self.idle:
327 self.idle.join() 342 self.idle.join()
@@ -424,7 +439,7 @@ class ProcessServer():
424 self.idle_cond.notify_all() 439 self.idle_cond.notify_all()
425 440
426 while not self.quit: 441 while not self.quit:
427 nextsleep = 0.1 442 nextsleep = 1.0
428 fds = [] 443 fds = []
429 444
430 with bb.utils.lock_timeout(self._idlefuncsLock): 445 with bb.utils.lock_timeout(self._idlefuncsLock):
@@ -462,7 +477,7 @@ class ProcessServer():
462 477
463 # Create new heartbeat event? 478 # Create new heartbeat event?
464 now = time.time() 479 now = time.time()
465 if bb.event._heartbeat_enabled and now >= self.next_heartbeat: 480 if items and bb.event._heartbeat_enabled and now >= self.next_heartbeat:
466 # We might have missed heartbeats. Just trigger once in 481 # We might have missed heartbeats. Just trigger once in
467 # that case and continue after the usual delay. 482 # that case and continue after the usual delay.
468 self.next_heartbeat += self.heartbeat_seconds 483 self.next_heartbeat += self.heartbeat_seconds
@@ -485,31 +500,6 @@ class ProcessServer():
485 if nextsleep is not None: 500 if nextsleep is not None:
486 select.select(fds,[],[],nextsleep)[0] 501 select.select(fds,[],[],nextsleep)[0]
487 502
488 def idle_commands(self, delay, fds=None):
489 nextsleep = delay
490 if not fds:
491 fds = []
492
493 if not self.idle:
494 self.idle = threading.Thread(target=self.idle_thread)
495 self.idle.start()
496 elif self.idle and not self.idle.is_alive():
497 serverlog("Idle thread terminated, main thread exiting too")
498 bb.error("Idle thread terminated, main thread exiting too")
499 self.quit = True
500
501 if nextsleep is not None:
502 if self.xmlrpc:
503 nextsleep = self.xmlrpc.get_timeout(nextsleep)
504 try:
505 return select.select(fds,[],[],nextsleep)[0]
506 except InterruptedError:
507 # Ignore EINTR
508 return []
509 else:
510 return select.select(fds,[],[],0)[0]
511
512
513class ServerCommunicator(): 503class ServerCommunicator():
514 def __init__(self, connection, recv): 504 def __init__(self, connection, recv):
515 self.connection = connection 505 self.connection = connection
diff --git a/bitbake/lib/bb/server/xmlrpcserver.py b/bitbake/lib/bb/server/xmlrpcserver.py
index 04b0b17db1..ebc271aca4 100644
--- a/bitbake/lib/bb/server/xmlrpcserver.py
+++ b/bitbake/lib/bb/server/xmlrpcserver.py
@@ -14,6 +14,8 @@ from xmlrpc.server import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler
14import bb.server.xmlrpcclient 14import bb.server.xmlrpcclient
15 15
16import bb 16import bb
17import bb.cooker
18import bb.event
17 19
18# This request handler checks if the request has a "Bitbake-token" header 20# This request handler checks if the request has a "Bitbake-token" header
19# field (this comes from the client side) and compares it with its internal 21# field (this comes from the client side) and compares it with its internal
@@ -54,7 +56,7 @@ class BitBakeXMLRPCServer(SimpleXMLRPCServer):
54 56
55 def __init__(self, interface, cooker, parent): 57 def __init__(self, interface, cooker, parent):
56 # Use auto port configuration 58 # Use auto port configuration
57 if (interface[1] == -1): 59 if interface[1] == -1:
58 interface = (interface[0], 0) 60 interface = (interface[0], 0)
59 SimpleXMLRPCServer.__init__(self, interface, 61 SimpleXMLRPCServer.__init__(self, interface,
60 requestHandler=BitBakeXMLRPCRequestHandler, 62 requestHandler=BitBakeXMLRPCRequestHandler,
@@ -87,11 +89,12 @@ class BitBakeXMLRPCServer(SimpleXMLRPCServer):
87 def handle_requests(self): 89 def handle_requests(self):
88 self._handle_request_noblock() 90 self._handle_request_noblock()
89 91
90class BitBakeXMLRPCServerCommands(): 92class BitBakeXMLRPCServerCommands:
91 93
92 def __init__(self, server): 94 def __init__(self, server):
93 self.server = server 95 self.server = server
94 self.has_client = False 96 self.has_client = False
97 self.event_handle = None
95 98
96 def registerEventHandler(self, host, port): 99 def registerEventHandler(self, host, port):
97 """ 100 """
@@ -100,8 +103,8 @@ class BitBakeXMLRPCServerCommands():
100 s, t = bb.server.xmlrpcclient._create_server(host, port) 103 s, t = bb.server.xmlrpcclient._create_server(host, port)
101 104
102 # we don't allow connections if the cooker is running 105 # we don't allow connections if the cooker is running
103 if (self.server.cooker.state in [bb.cooker.state.parsing, bb.cooker.state.running]): 106 if self.server.cooker.state in [bb.cooker.State.PARSING, bb.cooker.State.RUNNING]:
104 return None, "Cooker is busy: %s" % bb.cooker.state.get_name(self.server.cooker.state) 107 return None, f"Cooker is busy: {self.server.cooker.state.name}"
105 108
106 self.event_handle = bb.event.register_UIHhandler(s, True) 109 self.event_handle = bb.event.register_UIHhandler(s, True)
107 return self.event_handle, 'OK' 110 return self.event_handle, 'OK'