This is the mail archive of the cygwin-patches@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[RFA] enable dynamic (thread safe) reents


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.

Attachment: reent.patch
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]