Message2869
Blows up under released Windows 2.0 and CVS Pythons (so it's not due to anything new):
import thread
def read(f):
import time
time.sleep(.01)
n = 0
while n < 1000000:
x = f.readline()
n += len(x)
print "r",
print "read " + `n`
m.release()
m = thread.allocate_lock()
f = open("ga", "w+")
print "opened"
m.acquire()
thread.start_new_thread(read, (f,))
n = 0
x = "x" * 113 + "\n"
while n < 1000000:
f.write(x)
print "w",
n += len(x)
m.acquire()
print "done"
Typical run:
C:\Python20>\code\python\dist\src\pcbuild\python temp.py
opened
w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w
w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w
w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w
w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w
w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w
w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w
w w w w w w w w w w w w w w w w w w w w w w w w w w w w w w r w r
w r w r w r w r w r w r w r w r w r w r w r w r w r w r w r w r w
r r w r w r w r w r w r
and then it dies in msvcrt.dll with a bad pointer. Also dies under the debugger (yay!) ... always dies like so:
+ We (Python) call the MS fwrite, from fileobject.c file_write.
+ MS fwrite succeeds with its _lock_str(stream) call.
+ MS fwrite then calls MS _fwrite_lk.
+ MS _fwrite_lk calls memcpy, which blows up for a non-obvious reason.
Looks like the stream's _cnt member has gone mildly negative, which _fwrite_lk casts to unsigned and so treats like a giant positive count, and so memcpy eventually runs off the end of the process address space.
Only thing I can conclude from this is that MS's internal stream-locking implementation is buggy. At least on W98SE. Other flavors of Windows? Other platforms?
Note that I don't claim the program above is *sensible*, just that it shouldn't blow up. Alas, short of adding a separate mutex in Python file objects-- or writing our own stdio --I don't believe I can fix this.
|
|
Date |
User |
Action |
Args |
2007-08-23 13:52:40 | admin | link | issue228210 messages |
2007-08-23 13:52:40 | admin | create | |
|