[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

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


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
	* 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