* 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:
Christopher Faylor 2004-03-26 20:02:01 +00:00
parent 6b0d86c56d
commit 11a9a1cfbd
3 changed files with 69 additions and 1 deletions

View File

@ -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.

View File

@ -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. */

View File

@ -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)
{ {