[issue6562] OverflowError in RLock.acquire()
New submission from David Roberts : I'm getting the following error on Windows in an application I've written (the error does not occur on Linux): Exception in thread Thread-4: Traceback (most recent call last): File "C:\Python26\lib\threading.py", line 525, in __bootstrap_inner self.run() File "C:\Documents and Settings\David\My Documents\pyzui\pyzui\tileprovider.py", line 97, in run self.__tilecache[tile_id] = Tile(tile) File "C:\Documents and Settings\David\My Documents\pyzui\pyzui\tilecache.py", line 165, in __setitem__ with self.__lock: File "C:\Python26\lib\threading.py", line 115, in acquire me = current_thread() File "C:\Python26\lib\threading.py", line 803, in currentThread return _active[_get_ident()] OverflowError: can't convert negative value to unsigned long Where __lock is an RLock object. The odd thing is that it only affects a single class (which is derived from the TileProvider class in tileprovider.py, which in turn is derived from threading.Thread). This led me to believe there was an error in my code, but I asked on the mailing list and was told that it is likely a bug in the threading module. The Python version is 2.6.2. -- components: Library (Lib), Windows messages: 90879 nosy: davidar severity: normal status: open title: OverflowError in RLock.acquire() type: crash versions: Python 2.6 ___ Python tracker <http://bugs.python.org/issue6562> ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue6562] OverflowError in RLock.acquire()
David Roberts added the comment: thread.get_ident() returns 1192 and 1560 in the cases where there is no error, and 1316 in the case where the error is thrown. Doesn't seem particularly unusual, and shows get_ident() isn't throwing the error itself. I also noticed that there is a warning right before the exception is raised: C:\Python26\lib\threading.py:803: RuntimeWarning: tp_compare didn't return -1 or -2 for exception return _active[_get_ident()] I've attached the relevant snippets of code. As you can see OSMTileProvider (the class that is triggering the exception) doesn't actually do all that much, and the two other classes derived from DynamicTileProvider function correctly so I don't understand what it is about this specific class. -- Added file: http://bugs.python.org/file14564/tileproviders.py ___ Python tracker <http://bugs.python.org/issue6562> ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue6562] OverflowError in RLock.acquire()
David Roberts added the comment: I haven't been able to isolate the issue. Could someone provide some insight into what the error could possibly mean so that I have a better idea of what I'm trying to isolate? -- ___ Python tracker <http://bugs.python.org/issue6562> ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue6562] OverflowError in RLock.acquire()
David Roberts added the comment: If I comment out all occurrences of "with self.__lock:" I then get the same error in another part of the code: C:\Python26\lib\threading.py:803: RuntimeWarning: tp_compare didn't return -1 or -2 for exception return _active[_get_ident()] Exception in thread Thread-4: Traceback (most recent call last): File "C:\Python26\lib\threading.py", line 525, in __bootstrap_inner self.run() File "C:\Documents and Settings\David\My Documents\pyzui\pyzui\tileprovider.py", line 82, in run self.__tasks_available.acquire() File "C:\Python26\lib\threading.py", line 115, in acquire me = current_thread() File "C:\Python26\lib\threading.py", line 803, in currentThread return _active[_get_ident()] OverflowError: can't convert negative value to unsigned long Where self.__tasks_available is a threading.Condition. If I comment out that bit, I then get the following error: Traceback (most recent call last): File "C:\Documents and Settings\David\My Documents\pyzui\pyzui\tileprovider.py", line 91, in run tile = self._load(tile_id) File "C:\Documents and Settings\David\My Documents\pyzui\pyzui\dynamictileprovider.py", line 55, in _load tile_id, True, filext=self.filext) File "C:\Documents and Settings\David\My Documents\pyzui\pyzui\tilestore.py", line 72, in get_tile_path prefix = get_media_path(media_id) File "C:\Documents and Settings\David\My Documents\pyzui\pyzui\tilestore.py", line 46, in get_media_path media_dir = os.path.join(tile_dir, media_hash) File "C:\Python26\lib\ntpath.py", line 97, in join if path[-1] in "/\\": IndexError: cannot fit 'int' into an index-sized integer I'm not sure if this error is related to the other errors, but similarly this error only occurs in this specific thread. -- ___ Python tracker <http://bugs.python.org/issue6562> ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue6562] OverflowError in RLock.acquire()
David Roberts added the comment: Yes, it is the PIL library. Removing calls to Image.open() still results in the same error - the exception is thrown before it even reaches that bit of the code anyway. Another odd thing is that the exception is only thrown on some of the calls to get_tile_path, every second call to be exact - see the attached log file. I'm also attaching the relevant code from tilestore.py. -- Added file: http://bugs.python.org/file14567/osm.log ___ Python tracker <http://bugs.python.org/issue6562> ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue6562] OverflowError in RLock.acquire()
Changes by David Roberts : Added file: http://bugs.python.org/file14568/tilestore.py ___ Python tracker <http://bugs.python.org/issue6562> ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue6562] OverflowError in RLock.acquire()
David Roberts added the comment: I think I've narrowed it down to the ImageQt class provided by PIL - commenting out the reference to this (in the constructor of the Tile class referenced by TileProvider.run) stops the errors. So how do I go about determining where the problem with ImageQt lies? (It's only ~50 lines, so there can't be too many things that could possibly go wrong) -- ___ Python tracker <http://bugs.python.org/issue6562> ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue6562] OverflowError in RLock.acquire()
David Roberts added the comment: Ok, so if it's a bug in (Py)Qt then I'm not going to worry about it. I've managed to fix the issue in my case anyway, by (essentially) replacing: image = Image.open(fname) image.load() tile = ImageQt(image) with (the much more obvious way to do it): tile = QImage(fname) -- ___ Python tracker <http://bugs.python.org/issue6562> ___ ___ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com