* path.cc (path_conv::check): Use 'strchr' rather than 'strrchr' to find end of
string, for efficiency. * include/cygwin/_types.h: New file. * include/sys/lock.h: Ditto. * include/sys/stdio.h: Ditto. * thread.cc: Include sys/lock.h (__cygwin_lock_init): New function. (__cygwin_lock_init_recursive): Ditto. (__cygwin_lock_fini): Ditto. (__cygwin_lock_lock): Ditto. (__cygwin_lock_trylock): Ditto. (__cygwin_lock_unlock): Ditto. (pthread::atforkprepare): Lock file pointer before fork. (pthread::atforkparent): Unlock file pointer after fork. (pthread::atforkchild): Ditto.
This commit is contained in:
parent
6b0d86c56d
commit
11a9a1cfbd
|
@ -1,3 +1,24 @@
|
||||||
|
2004-03-26 Christopher Faylor <cgf@redhat.com>
|
||||||
|
|
||||||
|
* path.cc (path_conv::check): Use 'strchr' rather than 'strrchr' to
|
||||||
|
find end of string, for efficiency.
|
||||||
|
|
||||||
|
2004-03-26 Thomas Pfaff <tpfaff@gmx.net>
|
||||||
|
|
||||||
|
* include/cygwin/_types.h: New file.
|
||||||
|
* include/sys/lock.h: Ditto.
|
||||||
|
* include/sys/stdio.h: Ditto.
|
||||||
|
* thread.cc: Include sys/lock.h
|
||||||
|
(__cygwin_lock_init): New function.
|
||||||
|
(__cygwin_lock_init_recursive): Ditto.
|
||||||
|
(__cygwin_lock_fini): Ditto.
|
||||||
|
(__cygwin_lock_lock): Ditto.
|
||||||
|
(__cygwin_lock_trylock): Ditto.
|
||||||
|
(__cygwin_lock_unlock): Ditto.
|
||||||
|
(pthread::atforkprepare): Lock file pointer before fork.
|
||||||
|
(pthread::atforkparent): Unlock file pointer after fork.
|
||||||
|
(pthread::atforkchild): Ditto.
|
||||||
|
|
||||||
2004-03-26 Corinna Vinschen <corinna@vinschen.de>
|
2004-03-26 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* sem.cc (semget): Fix debug string.
|
* sem.cc (semget): Fix debug string.
|
||||||
|
|
|
@ -495,7 +495,7 @@ path_conv::check (const char *src, unsigned opt,
|
||||||
MALLOC_CHECK;
|
MALLOC_CHECK;
|
||||||
assert (src);
|
assert (src);
|
||||||
|
|
||||||
char *p = strrchr (src, '\0');
|
char *p = strchr (src, '\0');
|
||||||
/* Detect if the user was looking for a directory. We have to strip the
|
/* Detect if the user was looking for a directory. We have to strip the
|
||||||
trailing slash initially and add it back on at the end due to Windows
|
trailing slash initially and add it back on at the end due to Windows
|
||||||
brain damage. */
|
brain damage. */
|
||||||
|
|
|
@ -44,6 +44,10 @@ details. */
|
||||||
#include <sys/timeb.h>
|
#include <sys/timeb.h>
|
||||||
#include <exceptions.h>
|
#include <exceptions.h>
|
||||||
#include <sys/fcntl.h>
|
#include <sys/fcntl.h>
|
||||||
|
#include <sys/lock.h>
|
||||||
|
|
||||||
|
extern "C" void __fp_lock_all ();
|
||||||
|
extern "C" void __fp_unlock_all ();
|
||||||
|
|
||||||
extern int threadsafe;
|
extern int threadsafe;
|
||||||
|
|
||||||
|
@ -54,6 +58,43 @@ __getreent ()
|
||||||
return &_my_tls.local_clib;
|
return &_my_tls.local_clib;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" void
|
||||||
|
__cygwin_lock_init (_LOCK_T *lock)
|
||||||
|
{
|
||||||
|
*lock = _LOCK_T_INITIALIZER;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" void
|
||||||
|
__cygwin_lock_init_recursive (_LOCK_T *lock)
|
||||||
|
{
|
||||||
|
*lock = _LOCK_T_RECURSIVE_INITIALIZER;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" void
|
||||||
|
__cygwin_lock_fini (_LOCK_T *lock)
|
||||||
|
{
|
||||||
|
pthread_mutex_destroy ((pthread_mutex_t*) lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" void
|
||||||
|
__cygwin_lock_lock (_LOCK_T *lock)
|
||||||
|
{
|
||||||
|
pthread_mutex_lock ((pthread_mutex_t*) lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" void
|
||||||
|
__cygwin_lock_trylock (_LOCK_T *lock)
|
||||||
|
{
|
||||||
|
pthread_mutex_trylock ((pthread_mutex_t*) lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
extern "C" void
|
||||||
|
__cygwin_lock_unlock (_LOCK_T *lock)
|
||||||
|
{
|
||||||
|
pthread_mutex_unlock ((pthread_mutex_t*) lock);
|
||||||
|
}
|
||||||
|
|
||||||
inline LPCRITICAL_SECTION
|
inline LPCRITICAL_SECTION
|
||||||
ResourceLocks::Lock (int _resid)
|
ResourceLocks::Lock (int _resid)
|
||||||
{
|
{
|
||||||
|
@ -1908,11 +1949,15 @@ pthread::atforkprepare (void)
|
||||||
cb->cb ();
|
cb->cb ();
|
||||||
cb = cb->next;
|
cb = cb->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__fp_lock_all ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
pthread::atforkparent (void)
|
pthread::atforkparent (void)
|
||||||
{
|
{
|
||||||
|
__fp_unlock_all ();
|
||||||
|
|
||||||
callback *cb = MT_INTERFACE->pthread_parent;
|
callback *cb = MT_INTERFACE->pthread_parent;
|
||||||
while (cb)
|
while (cb)
|
||||||
{
|
{
|
||||||
|
@ -1926,6 +1971,8 @@ pthread::atforkchild (void)
|
||||||
{
|
{
|
||||||
MT_INTERFACE->fixup_after_fork ();
|
MT_INTERFACE->fixup_after_fork ();
|
||||||
|
|
||||||
|
__fp_unlock_all ();
|
||||||
|
|
||||||
callback *cb = MT_INTERFACE->pthread_child;
|
callback *cb = MT_INTERFACE->pthread_child;
|
||||||
while (cb)
|
while (cb)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue