Fix various bugs getting in the way of licq starting up.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@150 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/vg_libpthread.c b/vg_libpthread.c
index 370acec..2715953 100644
--- a/vg_libpthread.c
+++ b/vg_libpthread.c
@@ -259,6 +259,13 @@
}
+int pthread_detach(pthread_t th)
+{
+ ignored("pthread_detach");
+ return 0;
+}
+
+
/* ---------------------------------------------------
MUTEX ATTRIBUTES
------------------------------------------------ */
@@ -493,13 +500,18 @@
CANCELLATION
------------------------------------------------ */
+int pthread_setcancelstate(int state, int *oldstate)
+{
+ ignored("pthread_setcancelstate");
+ return 0;
+}
+
int pthread_setcanceltype(int type, int *oldtype)
{
ignored("pthread_setcanceltype");
return 0;
}
-
int pthread_cancel(pthread_t thread)
{
int res;
@@ -510,6 +522,27 @@
return res;
}
+void pthread_testcancel(void)
+{
+}
+
+/*-------------------*/
+static pthread_mutex_t massacre_mx = PTHREAD_MUTEX_INITIALIZER;
+
+void __pthread_kill_other_threads_np ( void )
+{
+ int i, res, me;
+ pthread_mutex_lock(&massacre_mx);
+ me = pthread_self();
+ for (i = 1; i < VG_N_THREADS; i++) {
+ if (i == me) continue;
+ res = pthread_cancel(i);
+ if (res == 0)
+ printf("----------- NUKED %d\n", i);
+ }
+ pthread_mutex_unlock(&massacre_mx);
+}
+
/* ---------------------------------------------------
THREAD-SPECIFICs
@@ -584,6 +617,19 @@
/* ---------------------------------------------------
+ MISC
+ ------------------------------------------------ */
+
+int pthread_atfork ( void (*prepare)(void),
+ void (*parent)(void),
+ void (*child)(void) )
+{
+ ignored("pthread_atfork");
+ return 0;
+}
+
+
+/* ---------------------------------------------------
LIBRARY-PRIVATE THREAD SPECIFIC STATE
------------------------------------------------ */
@@ -698,18 +744,18 @@
extern
-int __libc_open64(const char *pathname, int flags, ...);
-int open64(const char *pathname, int flags, ...)
+int __libc_open64(const char *pathname, int flags, mode_t mode);
+int open64(const char *pathname, int flags, mode_t mode)
{
- return __libc_open64(pathname, flags);
+ return __libc_open64(pathname, flags, mode);
}
extern
-int __libc_open(const char *pathname, int flags);
-int open(const char *pathname, int flags)
+int __libc_open(const char *pathname, int flags, mode_t mode);
+int open(const char *pathname, int flags, mode_t mode)
{
- return __libc_open(pathname, flags);
+ return __libc_open(pathname, flags, mode);
}
@@ -1142,6 +1188,7 @@
extern __typeof (name) aliasname __attribute__ ((alias (#name)));
strong_alias(pthread_mutex_lock, __pthread_mutex_lock)
+strong_alias(pthread_mutex_trylock, __pthread_mutex_trylock)
strong_alias(pthread_mutex_unlock, __pthread_mutex_unlock)
strong_alias(pthread_mutexattr_init, __pthread_mutexattr_init)
strong_alias(pthread_mutexattr_settype, __pthread_mutexattr_settype)
@@ -1149,7 +1196,9 @@
strong_alias(pthread_mutexattr_destroy, __pthread_mutexattr_destroy)
strong_alias(pthread_mutex_destroy, __pthread_mutex_destroy)
strong_alias(pthread_once, __pthread_once)
+strong_alias(pthread_atfork, __pthread_atfork)
+strong_alias(fork, __fork)
strong_alias(close, __close)
strong_alias(write, __write)
strong_alias(read, __read)
@@ -1171,16 +1220,18 @@
#undef _IO_flockfile
void _IO_flockfile ( _IO_FILE * file )
{
- // char* str = "_IO_flockfile\n";
- // write(2, str, strlen(str));
+ //char* str = "_IO_flockfile\n";
+ //write(2, str, strlen(str));
+ pthread_mutex_lock(file->_lock);
// barf("_IO_flockfile");
}
#undef _IO_funlockfile
void _IO_funlockfile ( _IO_FILE * file )
{
- // char* str = "_IO_funlockfile\n";
- // write(2, str, strlen(str));
+ //char* str = "_IO_funlockfile\n";
+ //write(2, str, strlen(str));
+ pthread_mutex_unlock(file->_lock);
// barf("_IO_funlockfile");
}