<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux/poky.git/bitbake/lib, branch 5.3_M2</title>
<subtitle>Mirror of git.yoctoproject.org/poky</subtitle>
<id>https://git.enea.com/cgit/linux/poky.git/atom?h=5.3_M2</id>
<link rel='self' href='https://git.enea.com/cgit/linux/poky.git/atom?h=5.3_M2'/>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/poky.git/'/>
<updated>2025-07-23T10:34:31+00:00</updated>
<entry>
<title>bitbake: sigen: Avoid bitbake abort with EOFerror from an incomplete hashserv communication</title>
<updated>2025-07-23T10:34:31+00:00</updated>
<author>
<name>Pedro Ferreira</name>
<email>Pedro.Silva.Ferreira@criticaltechworks.com</email>
</author>
<published>2025-07-22T08:27:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/poky.git/commit/?id=921c46de4fb36e02c29369f6d3066a622c7d51f7'/>
<id>urn:sha1:921c46de4fb36e02c29369f6d3066a622c7d51f7</id>
<content type='text'>
The issue itself is sporadic but aborts the build with an uncaught exception.

The stack trace of python calls that resulted in this exception/failure was:
File: 'exec_func_python() autogenerated', lineno: 2, function: &lt;module&gt;
     0001:
 *** 0002:sstate_report_unihash(d)
     0003:
File: '(...)/poky/meta/classes/sstate.bbclass', lineno: 882, function: sstate_report_unihash
     0878:    report_unihash = getattr(bb.parse.siggen, 'report_unihash', None)
     0879:
     0880:    if report_unihash:
     0881:        ss = sstate_state_fromvars(d)
 *** 0882:        report_unihash(os.getcwd(), ss['task'], d)
     0883:}
     0884:
     0885:#
     0886:# Shell function to decompress and prepare a package for installation
File: '(...)/poky/lib/bb/siggen.py', lineno: 651, function: report_unihash
     0647:                method = self.method
     0648:                if tid in self.extramethod:
     0649:                    method = method + self.extramethod[tid]
     0650:
 *** 0651:                data = self.client().report_unihash(taskhash, method, outhash, unihash, extra_data)
     0652:                new_unihash = data['unihash']
     0653:
     0654:                if new_unihash != unihash:
     0655:                    hashequiv_logger.debug('Task %s unihash changed %s -&gt; %s by server %s' % (taskhash, unihash, new_unihash, self.server))
File: '(...)/poky/lib/bb/asyncrpc/client.py', lineno: 139, function: wrapper
     0135:        pass
     0136:
     0137:    def _get_downcall_wrapper(self, downcall):
     0138:        def wrapper(*args, **kwargs):
 *** 0139:            return self.loop.run_until_complete(downcall(*args, **kwargs))
     0140:
     0141:        return wrapper
     0142:
     0143:    def _add_methods(self, *methods):
File: '/usr/lib/python3.9/asyncio/base_events.py', lineno: 642, function: run_until_complete
     0638:            future.remove_done_callback(_run_until_complete_cb)
     0639:        if not future.done():
     0640:            raise RuntimeError('Event loop stopped before Future completed.')
     0641:
 *** 0642:        return future.result()
     0643:
     0644:    def stop(self):
     0645:        """Stop running the event loop.
     0646:
File: '(...)/poky/lib/hashserv/client.py', lineno: 70, function: report_unihash
     0066:        m["taskhash"] = taskhash
     0067:        m["method"] = method
     0068:        m["outhash"] = outhash
     0069:        m["unihash"] = unihash
 *** 0070:        return await self.invoke({"report": m})
     0071:
     0072:    async def report_unihash_equiv(self, taskhash, method, unihash, extra={}):
     0073:        await self._set_mode(self.MODE_NORMAL)
     0074:        m = extra.copy()
File: '(...)/poky/lib/bb/asyncrpc/client.py', lineno: 104, function: invoke
     0100:        async def proc():
     0101:            await self.socket.send_message(msg)
     0102:            return await self.socket.recv_message()
     0103:
 *** 0104:        return await self._send_wrapper(proc)
     0105:
     0106:    async def ping(self):
     0107:        return await self.invoke({"ping": {}})
     0108:
File: '(...)/poky/lib/bb/asyncrpc/client.py', lineno: 82, function: _send_wrapper
     0078:    async def _send_wrapper(self, proc):
     0079:        count = 0
     0080:        while True:
     0081:            try:
 *** 0082:                await self.connect()
     0083:                return await proc()
     0084:            except (
     0085:                OSError,
     0086:                ConnectionError,
File: '(...)/poky/lib/bb/asyncrpc/client.py', lineno: 70, function: connect
     0066:        await self.socket.send("")
     0067:
     0068:    async def connect(self):
     0069:        if self.socket is None:
 *** 0070:            self.socket = await self._connect_sock()
     0071:            await self.setup_connection()
     0072:
     0073:    async def close(self):
     0074:        if self.socket is not None:
File: '(...)/poky/lib/bb/asyncrpc/client.py', lineno: 55, function: connect_sock
     0051:        import websockets
     0052:
     0053:        async def connect_sock():
     0054:            try:
 *** 0055:                websocket = await websockets.connect(uri, ping_interval=None)
     0056:            except (OSError, asyncio.exceptions.TimeoutError, websockets.InvalidHandshake, websockets.InvalidURI) as exc:
     0057:                raise ConnectionError("Could not connect to websocket: %s" % exc) from exc
     0058:            return WebsocketConnection(websocket, self.timeout)
     0059:
File: '/usr/local/lib/python3.9/dist-packages/websockets/asyncio/client.py', lineno: 444, function: __await_impl__
     0440:            async with asyncio_timeout(self.open_timeout):
     0441:                for _ in range(MAX_REDIRECTS):
     0442:                    self.connection = await self.create_connection()
     0443:                    try:
 *** 0444:                        await self.connection.handshake(*self.handshake_args)
     0445:                    except asyncio.CancelledError:
     0446:                        self.connection.close_transport()
     0447:                        raise
     0448:                    except Exception as exc:
File: '/usr/local/lib/python3.9/dist-packages/websockets/asyncio/client.py', lineno: 104, function: handshake
     0100:        # receiving a response, when the response cannot be parsed, or when the
     0101:        # response fails the handshake.
     0102:
     0103:        if self.protocol.handshake_exc is not None:
 *** 0104:            raise self.protocol.handshake_exc
     0105:
     0106:    def process_event(self, event: Event) -&gt; None:
     0107:        """
     0108:        Process one incoming event.
File: '/usr/local/lib/python3.9/dist-packages/websockets/client.py', lineno: 315, function: parse
     0311:
     0312:    def parse(self) -&gt; Generator[None]:
     0313:        if self.state is CONNECTING:
     0314:            try:
 *** 0315:                response = yield from Response.parse(
     0316:                    self.reader.read_line,
     0317:                    self.reader.read_exact,
     0318:                    self.reader.read_to_eof,
     0319:                )
File: '/usr/local/lib/python3.9/dist-packages/websockets/http11.py', lineno: 238, function: parse
     0234:
     0235:        try:
     0236:            status_line = yield from parse_line(read_line)
     0237:        except EOFError as exc:
 *** 0238:            raise EOFError("connection closed while reading HTTP status line") from exc
     0239:
     0240:        try:
     0241:            protocol, raw_status_code, raw_reason = status_line.split(b" ", 2)
     0242:        except ValueError:  # not enough values to unpack (expected 3, got 1-2)
Exception: EOFError: connection closed while reading HTTP status line

(Bitbake rev: 5ba7c2f0797a72536a81f57276d4e5c75f23011c)

Signed-off-by: Pedro Ferreira &lt;Pedro.Silva.Ferreira@criticaltechworks.com&gt;
Signed-off-by: Richard Purdie &lt;richard.purdie@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>bitbake: utils: Remove multiprocessingpool</title>
<updated>2025-07-23T10:34:31+00:00</updated>
<author>
<name>Joshua Watt</name>
<email>JPEWhacker@gmail.com</email>
</author>
<published>2025-07-21T19:41:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/poky.git/commit/?id=c54fbf676159c57c8d73f983a55b63b580a5ce4c'/>
<id>urn:sha1:c54fbf676159c57c8d73f983a55b63b580a5ce4c</id>
<content type='text'>
This API is no longer used and bitbake has moved beyond Python 2.7.3 as
the minimum version, so remove it.

(Bitbake rev: 0eb7b5dd512ed8d8b77b5779858b9fbd99edb4a4)

Signed-off-by: Joshua Watt &lt;JPEWhacker@gmail.com&gt;
Signed-off-by: Richard Purdie &lt;richard.purdie@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>bitbake: Use a "fork" multiprocessing context</title>
<updated>2025-07-23T10:34:31+00:00</updated>
<author>
<name>Joshua Watt</name>
<email>JPEWhacker@gmail.com</email>
</author>
<published>2025-07-21T19:40:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/poky.git/commit/?id=d363bc475a80c7ac0b0126de6dbd2017287dc1d2'/>
<id>urn:sha1:d363bc475a80c7ac0b0126de6dbd2017287dc1d2</id>
<content type='text'>
Python 3.14 changes the default multiprocessing context from "fork" to
"forkserver"; however bitbake heavily relies on "fork" to efficiently
pass data to the child processes. As such, make "fork" context in the bb
namespace and use it in place of the normal multiprocessing module.

Note that multiprocessing contexts were added in Python 3.4, so this
should be safe to use even before Python 3.14

[YOCTO #15858]

(Bitbake rev: 62be9113d98fccb347c6aa0a10d5c4ee2857f8b6)

Signed-off-by: Joshua Watt &lt;JPEWhacker@gmail.com&gt;
Signed-off-by: Richard Purdie &lt;richard.purdie@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>bitbake: test/fetch: Switch u-boot based test to use our own mirror</title>
<updated>2025-07-22T10:14:21+00:00</updated>
<author>
<name>Richard Purdie</name>
<email>richard.purdie@linuxfoundation.org</email>
</author>
<published>2025-07-22T10:13:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/poky.git/commit/?id=b0f8af26a78aa6785b3e57585e86fc668808cd84'/>
<id>urn:sha1:b0f8af26a78aa6785b3e57585e86fc668808cd84</id>
<content type='text'>
The upstream servers are having issues so switch to our own shadow copy
of the repo.

(Bitbake rev: e910c7cd24fd366d6756641cd599c4efeb492e2a)

Signed-off-by: Richard Purdie &lt;richard.purdie@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>bitbake: utils: Split profile reports into separate files</title>
<updated>2025-07-21T16:49:04+00:00</updated>
<author>
<name>Richard Purdie</name>
<email>richard.purdie@linuxfoundation.org</email>
</author>
<published>2025-07-18T13:31:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/poky.git/commit/?id=cdb6e3e5c5724098ba072af91f9dff283a13ef72'/>
<id>urn:sha1:cdb6e3e5c5724098ba072af91f9dff283a13ef72</id>
<content type='text'>
Use a more logical name for the profile reports and put each report
into a separate file since people struggle to discover them currently.

(Bitbake rev: a8145c84e0899285a5e6a809f1515118b002b106)

Signed-off-by: Richard Purdie &lt;richard.purdie@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>bitbake: utils: Optimise signal/sigmask performance</title>
<updated>2025-07-21T16:49:04+00:00</updated>
<author>
<name>Richard Purdie</name>
<email>richard.purdie@linuxfoundation.org</email>
</author>
<published>2025-07-18T12:56:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/poky.git/commit/?id=49d0abc5c80d6ed49eb1ba019cc95d44bf0f5029'/>
<id>urn:sha1:49d0abc5c80d6ed49eb1ba019cc95d44bf0f5029</id>
<content type='text'>
Running "time bitbake -pP idle" with a valid cache shows around 800,000
calls to enum creation from python's signal.py. We don't care about this
overhead and it adversely affects cache load time quite badly.

Try and use _signal directly, falling back to signal, which avoids
this overhead we don't need and makes cache loading much faster.

(Bitbake rev: ee5fce67ce35b025c68aa61e2e758903269ee346)

Signed-off-by: Richard Purdie &lt;richard.purdie@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>bitbake: main: Add an option to specify what to profile</title>
<updated>2025-07-17T09:45:57+00:00</updated>
<author>
<name>Richard Purdie</name>
<email>richard.purdie@linuxfoundation.org</email>
</author>
<published>2025-07-16T15:15:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/poky.git/commit/?id=f209f127e654df7424adf41de07f88714d7952ab'/>
<id>urn:sha1:f209f127e654df7424adf41de07f88714d7952ab</id>
<content type='text'>
Starting with python 3.12, profiling now stays enabled over threads yet
you can't extract the profile data in the threads themselves, which makes it
difficult to use for our use case.

Our main loop starts the idle loop which starts the parsing threads and this
means we can't profile in the main loop and the parsing threads or the idle
loop at the same time due to this.

Add options to the commandline so you can specify which piece of bitbake
you want to enable profiling for. This allows some profiling with python 3.12
onwards rather than crashing.

(Bitbake rev: 09f29a4968841ee5070f70277ba8c253bb14f017)

Signed-off-by: Richard Purdie &lt;richard.purdie@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>bitbake: event: Fix an event duplication race</title>
<updated>2025-07-17T09:45:57+00:00</updated>
<author>
<name>Richard Purdie</name>
<email>richard.purdie@linuxfoundation.org</email>
</author>
<published>2025-07-16T15:14:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/poky.git/commit/?id=b7173ca2254421c45f01243a77be611fe4b9d1c5'/>
<id>urn:sha1:b7173ca2254421c45f01243a77be611fe4b9d1c5</id>
<content type='text'>
It is possible for multple bitbake threads to empty ui_queue in parallel
leading to duplicate console messages and much confusion when debuging.

Use the lock to extract the queue data which means only one thread will
processing, removing the duplicate out of order messages.

(Bitbake rev: 945095602e40d54efb8de494218f4a2b25c9969f)

Signed-off-by: Richard Purdie &lt;richard.purdie@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>bitbake: cooker/process/utils: Create profiling common function to remove code duplication</title>
<updated>2025-07-17T09:45:57+00:00</updated>
<author>
<name>Richard Purdie</name>
<email>richard.purdie@linuxfoundation.org</email>
</author>
<published>2025-07-16T14:56:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/poky.git/commit/?id=e16dd314450cb2b85e4984c17fa60403b662ef8c'/>
<id>urn:sha1:e16dd314450cb2b85e4984c17fa60403b662ef8c</id>
<content type='text'>
We have code duplication in the way we handle profiling of code sections.
Create a common function in utils which covers this.

The main loop and idle loop profile files were also reversed. Fix this and the naming,
removing a couple of unused variables containing the profile log names in the process too.

(Bitbake rev: b4f6bae97ac9607420fc49fd4c9e957d89c9a5f3)

Signed-off-by: Richard Purdie &lt;richard.purdie@linuxfoundation.org&gt;
</content>
</entry>
<entry>
<title>bitbake: asyncrpc: Avoid file not found traceback in logs</title>
<updated>2025-07-17T09:45:57+00:00</updated>
<author>
<name>Richard Purdie</name>
<email>richard.purdie@linuxfoundation.org</email>
</author>
<published>2025-07-16T08:33:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.enea.com/cgit/linux/poky.git/commit/?id=6933d4b57ef9b2b6bbc8c97069a4f54e46eb3e4d'/>
<id>urn:sha1:6933d4b57ef9b2b6bbc8c97069a4f54e46eb3e4d</id>
<content type='text'>
If the server is quickly stopped, we see tracebacks in the locks
due to the file not existing. Hide these as they're not errors.

(Bitbake rev: a7e1a07e9ef7e6f6a1bcaf567d7916a8ee1ef087)

Signed-off-by: Richard Purdie &lt;richard.purdie@linuxfoundation.org&gt;
</content>
</entry>
</feed>
