diff options
| -rw-r--r-- | bitbake/lib/bb/asyncrpc/client.py | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/bitbake/lib/bb/asyncrpc/client.py b/bitbake/lib/bb/asyncrpc/client.py index 881434d2e9..fa042bbe87 100644 --- a/bitbake/lib/bb/asyncrpc/client.py +++ b/bitbake/lib/bb/asyncrpc/client.py | |||
| @@ -31,7 +31,17 @@ class AsyncClient(object): | |||
| 31 | 31 | ||
| 32 | async def connect_unix(self, path): | 32 | async def connect_unix(self, path): |
| 33 | async def connect_sock(): | 33 | async def connect_sock(): |
| 34 | return await asyncio.open_unix_connection(path) | 34 | # AF_UNIX has path length issues so chdir here to workaround |
| 35 | cwd = os.getcwd() | ||
| 36 | try: | ||
| 37 | os.chdir(os.path.dirname(path)) | ||
| 38 | # The socket must be opened synchronously so that CWD doesn't get | ||
| 39 | # changed out from underneath us so we pass as a sock into asyncio | ||
| 40 | sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM, 0) | ||
| 41 | sock.connect(os.path.basename(path)) | ||
| 42 | finally: | ||
| 43 | os.chdir(cwd) | ||
| 44 | return await asyncio.open_unix_connection(sock=sock) | ||
| 35 | 45 | ||
| 36 | self._connect_sock = connect_sock | 46 | self._connect_sock = connect_sock |
| 37 | 47 | ||
| @@ -150,14 +160,8 @@ class Client(object): | |||
| 150 | setattr(self, m, self._get_downcall_wrapper(downcall)) | 160 | setattr(self, m, self._get_downcall_wrapper(downcall)) |
| 151 | 161 | ||
| 152 | def connect_unix(self, path): | 162 | def connect_unix(self, path): |
| 153 | # AF_UNIX has path length issues so chdir here to workaround | 163 | self.loop.run_until_complete(self.client.connect_unix(path)) |
| 154 | cwd = os.getcwd() | 164 | self.loop.run_until_complete(self.client.connect()) |
| 155 | try: | ||
| 156 | os.chdir(os.path.dirname(path)) | ||
| 157 | self.loop.run_until_complete(self.client.connect_unix(os.path.basename(path))) | ||
| 158 | self.loop.run_until_complete(self.client.connect()) | ||
| 159 | finally: | ||
| 160 | os.chdir(cwd) | ||
| 161 | 165 | ||
| 162 | @property | 166 | @property |
| 163 | def max_chunk(self): | 167 | def max_chunk(self): |
