fixed WIN32 support
[NeonServV5.git] / src / main.c
index 17980b445762e5b2b9634d94bc2c4f2d93e98c98..b86633e7e01536e4df08fa7fb657f429dca994fc 100644 (file)
@@ -101,6 +101,8 @@ static int load_mysql_config() {
 }
 
 #ifdef HAVE_THREADS
+pthread_t *current_threads = NULL;
+
 void * thread_main(void *arg) {
     time_t socket_wait;
     while(running) {
@@ -114,6 +116,22 @@ void * thread_main(void *arg) {
     running_threads--;
     return NULL;
 }
+
+int getCurrentThreadID() {
+    if(!current_threads) return 0;
+    int i;
+    unsigned int my_tid = (unsigned int) pthread_self_tid();
+    for(i = 0; i < running_threads; i++) {
+        #ifdef WIN32
+        if((unsigned int) current_threads[i].p == my_tid)
+        #else
+        if((unsigned int) current_threads[i] == my_tid)
+        #endif
+            return i+1;
+    }
+    return 0;
+}
+
 #endif
 
 int main(int argc, char *argv[]) {
@@ -170,14 +188,13 @@ main:
     
     int worker_threads = get_int_field("General.worker_threads");
     if(!worker_threads) worker_threads = 1;
-    
     running = 1;
     #ifdef HAVE_THREADS
-    pthread_t tid[worker_threads];
     int tid_id = 0;
+    current_threads = calloc(worker_threads, sizeof(*current_threads));
     for(tid_id = 0; tid_id < worker_threads; tid_id++) {
         running_threads++;
-        pthread_create(&tid[tid_id], NULL, thread_main, NULL);
+        pthread_create(&current_threads[tid_id], NULL, thread_main, NULL);
     }
     int usleep_delay = 1000000 / TICKS_PER_SECOND;
     while(running) {
@@ -188,7 +205,7 @@ main:
         usleep(usleep_delay);
     }
     for(tid_id = 0; tid_id < worker_threads; tid_id++) {
-        pthread_join(tid[tid_id], NULL);
+        pthread_join(current_threads[tid_id], NULL);
     }
     running_threads = 0;
     #else