[Ironpython-users] struct pack / unpack not thread safe?

John Dickinson jhcd.jhcd at gmail.com
Thu Sep 20 16:58:58 CEST 2012


http://ironpython.codeplex.com/workitem/30228

On Thu, Sep 20, 2012 at 3:56 PM, John Dickinson <jhcd.jhcd at gmail.com> wrote:

> Sorry, I've just found this: http://ironpython.codeplex.com/workitem/30228so I see that it is a bug.
>
> On Thu, Sep 20, 2012 at 3:48 PM, John Dickinson <jhcd.jhcd at gmail.com>wrote:
>
>> I have at least two threads that end up calling struct.pack and
>> struct.unpack, and regularly get two exceptions: "SystemError: Object
>> reference not set to an instance of an object." and "SystemError: The
>> LinkedList node does not belong to current LinkedList.". The following code
>> reproduces the problem:
>>
>> import threading
>> import struct
>> import time
>> import traceback
>> import sys
>>
>> class TestThread(threading.Thread):
>>
>>     def __init__(self):
>>         super(TestThread, self).__init__()
>>         self.setDaemon(True)
>>
>>     def run(self):
>>         while True:
>>             try:
>>                 struct.unpack('!H', '\x4f\x00')
>>                 struct.pack('H', 20224)
>>                 time.sleep(0.005)
>>             except Exception, e:
>>                 print(str(e))
>>                 traceback.print_exception(*sys.exc_info())
>>
>> if __name__ == '__main__':
>>
>>     thread_1 = TestThread()
>>     thread_2 = TestThread()
>>
>>     thread_1.start()
>>     thread_2.start()
>>
>>     while True:
>>         print(".")
>>         time.sleep(1)
>>
>> (adding more TestThreads makes the error occur more regularly). Running
>> the same code in CPython (2.7) I get no errors (presumably because of the
>> GIL). It seems that struct isn't thread safe - is this a bug? I'm running
>> IronPython "2.7.3 (2.7.0.40) on .NET 4.0.30319.269 (32-bit)" on Windows 7.
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20120920/6d031403/attachment.html>


More information about the Ironpython-users mailing list