Added SYSDEPS_GetUnixTid to return the Unix thread id to send to the
server.
diff --git a/configure b/configure
index 0aac349..0451ec7 100755
--- a/configure
+++ b/configure
@@ -13249,8 +13249,10 @@
+
for ac_func in \
_lwp_create \
+ _lwp_self \
_pclose \
_popen \
_snprintf \
diff --git a/configure.ac b/configure.ac
index 8eb46ee..649a9da 100644
--- a/configure.ac
+++ b/configure.ac
@@ -943,6 +943,7 @@
AC_FUNC_ALLOCA()
AC_CHECK_FUNCS(\
_lwp_create \
+ _lwp_self \
_pclose \
_popen \
_snprintf \
diff --git a/include/config.h.in b/include/config.h.in
index 65062d8..4d37b99 100644
--- a/include/config.h.in
+++ b/include/config.h.in
@@ -677,6 +677,9 @@
/* Define to 1 if you have the `_lwp_create' function. */
#undef HAVE__LWP_CREATE
+/* Define to 1 if you have the `_lwp_self' function. */
+#undef HAVE__LWP_SELF
+
/* Define to 1 if you have the `_pclose' function. */
#undef HAVE__PCLOSE
diff --git a/include/thread.h b/include/thread.h
index 5fadd2b..2e4798d 100644
--- a/include/thread.h
+++ b/include/thread.h
@@ -147,6 +147,7 @@
/* scheduler/sysdeps.c */
extern int SYSDEPS_SpawnThread( TEB *teb );
extern void SYSDEPS_SetCurThread( TEB *teb );
+extern int SYSDEPS_GetUnixTid(void);
extern void SYSDEPS_InitErrno(void);
extern void DECLSPEC_NORETURN SYSDEPS_ExitThread( int status );
extern void DECLSPEC_NORETURN SYSDEPS_AbortThread( int status );
diff --git a/scheduler/client.c b/scheduler/client.c
index 8d3a554..4024cbc 100644
--- a/scheduler/client.c
+++ b/scheduler/client.c
@@ -694,7 +694,7 @@
SERVER_START_REQ( init_thread )
{
req->unix_pid = getpid();
- req->unix_tid = -1;
+ req->unix_tid = SYSDEPS_GetUnixTid();
req->teb = teb;
req->entry = teb->entry_point;
req->reply_fd = reply_pipe[1];
diff --git a/scheduler/sysdeps.c b/scheduler/sysdeps.c
index 7c322d1..ac62ecc 100644
--- a/scheduler/sysdeps.c
+++ b/scheduler/sysdeps.c
@@ -317,6 +317,25 @@
_exit( status );
}
+/***********************************************************************
+ * SYSDEPS_GetUnixTid
+ *
+ * Get the Unix tid of the current thread.
+ */
+int SYSDEPS_GetUnixTid(void)
+{
+#ifdef HAVE__LWP_SELF
+ return _lwp_self();
+#elif defined(__linux__) && defined(__i386__)
+ int ret;
+ __asm__("int $0x80" : "=a" (ret) : "0" (224) /* SYS_gettid */);
+ if (ret < 0) ret = -1;
+ return ret;
+#else
+ return -1;
+#endif
+}
+
/* default errno before threading is initialized */
static int *default_errno_location(void)