[RFA] enable dynamic (thread safe) reents
Thomas Pfaff
tpfaff@gmx.net
Fri May 16 07:54:00 GMT 2003
This patch will define __DYNAMIC_REENT__ for newlib, adds a __getreent
function and eliminates the use of _impure_ptr directly.
There is still one location in cygserver.cc where _impure_ptr is used
directly. And it is still used in exceptions.cc as long as signals are not
multithread safe.
While single threaded apps should keep run without problems (_impure_ptr
is still used for the mainthread) multithreaded apps should be recompiled
to get the full power of the thread safe reents. This is due the
fact that _RRENT is used in some newlib headers directly. Unfortunately
this affects also static libs, therefore this is will be a longer
transition.
While the primary goal was to get thread safe errnos, this will also fix
strange stdio outputs from multithreaded apps. I had these when i run
apps which made printfs from different threads simultanous in a Win32
console window, they did not happen in rxvt. Fortunately the errno
handling will be fixed anyway.
I consider that the patch is stable, it has passed the testsuite and i
didn't have any problems yet.
One more note: Apps compiled with this change will not run on older cygwin
releases.
Thomas
2003-05-16 Thomas Pfaff <tpfaff@gmx.net>
* include/cygwin/config.h (__DYNAMIC_REENT__): Define.
* include/cygwin/version.h: Bump API minor version.
* cygwin.din: Export __getreent
* cygerrno.h: Include errno.h.
Fix places where _impure_ptr is used directly to store the errno
value.
* errno.cc: Remove _RRENT_ONLY define to get errno.cc compiled.
* signal.cc: Rename _reent_clib to _REENT throughout.
* thread.h (reent_clib): Remove prototype.
* thread.cc (reent_clib): Rename reent_clib to __getreent.
Return _impure_ptr until MTinterface is initialized.
(reent_winsup): Fix a possible SEGV when _r == NULL.
Return NULL instead.
* MTinterface::fixup_after_fork: Switch reent back to _impure_ptr
to keep signal handling running when fork is called from a thread
other than the mainthread.
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: reent.patch
URL: <http://cygwin.com/pipermail/cygwin-patches/attachments/20030516/de07a3c6/attachment.ksh>
More information about the Cygwin-patches
mailing list