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.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/bitbake/lib/bb/server/process.py b/bitbake/lib/bb/server/process.py
index 982fcf71c3..1654faf92b 100644
--- a/bitbake/lib/bb/server/process.py
+++ b/bitbake/lib/bb/server/process.py
@@ -92,6 +92,8 @@ class ProcessServer(Process, BaseImplServer):
92 self.event = EventAdapter(event_queue) 92 self.event = EventAdapter(event_queue)
93 self.featurelist = featurelist 93 self.featurelist = featurelist
94 self.quit = False 94 self.quit = False
95 self.heartbeat_seconds = 1 # default, BB_HEARTBEAT_EVENT will be checked once we have a datastore.
96 self.next_heartbeat = time.time()
95 97
96 self.quitin, self.quitout = Pipe() 98 self.quitin, self.quitout = Pipe()
97 self.event_handle = multiprocessing.Value("i") 99 self.event_handle = multiprocessing.Value("i")
@@ -101,6 +103,14 @@ class ProcessServer(Process, BaseImplServer):
101 self.event_queue.put(event) 103 self.event_queue.put(event)
102 self.event_handle.value = bb.event.register_UIHhandler(self, True) 104 self.event_handle.value = bb.event.register_UIHhandler(self, True)
103 105
106 heartbeat_event = self.cooker.data.getVar('BB_HEARTBEAT_EVENT', True)
107 if heartbeat_event:
108 try:
109 self.heartbeat_seconds = float(heartbeat_event)
110 except:
111 # Throwing an exception here causes bitbake to hang.
112 # Just warn about the invalid setting and continue
113 bb.warn('Ignoring invalid BB_HEARTBEAT_EVENT=%s, must be a float specifying seconds.' % heartbeat_event)
104 bb.cooker.server_main(self.cooker, self.main) 114 bb.cooker.server_main(self.cooker, self.main)
105 115
106 def main(self): 116 def main(self):
@@ -160,6 +170,21 @@ class ProcessServer(Process, BaseImplServer):
160 del self._idlefuns[function] 170 del self._idlefuns[function]
161 self.quit = True 171 self.quit = True
162 172
173 # Create new heartbeat event?
174 now = time.time()
175 if now >= self.next_heartbeat:
176 # We might have missed heartbeats. Just trigger once in
177 # that case and continue after the usual delay.
178 self.next_heartbeat += self.heartbeat_seconds
179 if self.next_heartbeat <= now:
180 self.next_heartbeat = now + self.heartbeat_seconds
181 heartbeat = bb.event.HeartbeatEvent(now)
182 bb.event.fire(heartbeat, self.cooker.data)
183 if nextsleep and now + nextsleep > self.next_heartbeat:
184 # Shorten timeout so that we we wake up in time for
185 # the heartbeat.
186 nextsleep = self.next_heartbeat - now
187
163 if nextsleep is not None: 188 if nextsleep is not None:
164 select.select(fds,[],[],nextsleep) 189 select.select(fds,[],[],nextsleep)
165 190