]> mj.ucw.cz Git - libucw.git/blobdiff - lib/threads.c
tried parametrized fastbuf for most of indexing I/O
[libucw.git] / lib / threads.c
index cd1db74df31922d76777019963f9dd31cf1cc088..d2e0f220d769bce15c34935cb12ca259e8413cfe 100644 (file)
 
 #include <pthread.h>
 
+#ifdef CONFIG_LINUX
+#include <sys/types.h>
+#include <linux/unistd.h>
+#ifdef __NR_gettid
+static _syscall0(pid_t, gettid)
+#define CONFIG_USE_GETTID
+#endif
+#endif
+
 static pthread_key_t ucwlib_context_key;
 static pthread_mutex_t ucwlib_master_mutex;
 
@@ -34,10 +43,18 @@ ucwlib_threads_init(void)
 static int
 ucwlib_tid(void)
 {
-  static tid_counter;
+  static int tid_counter;
+  int tid;
+
+#ifdef CONFIG_USE_GETTID
+  tid = gettid();
+  if (tid > 0)
+    return tid;
+  /* The syscall might be unimplemented */
+#endif
 
   ucwlib_lock();
-  int tid = ++tid_counter;
+  tid = ++tid_counter;
   ucwlib_unlock();
   return tid;
 }
@@ -70,7 +87,7 @@ ucwlib_unlock(void)
 #else
 
 struct ucwlib_context *
-ucw_thread_context(void)
+ucwlib_thread_context(void)
 {
   static struct ucwlib_context ucwlib_context;
   return &ucwlib_context;