GNU threads support.
[yaz-moved-to-github.git] / server / statserv.c
index e4297bc..f4ab5c2 100644 (file)
@@ -7,7 +7,13 @@
  *   Chas Woodfield, Fretwell Downing Informatics.
  *
  * $Log: statserv.c,v $
- * Revision 1.72  2001-03-25 21:55:13  adam
+ * Revision 1.74  2001-10-03 23:55:18  adam
+ * GNU threads support.
+ *
+ * Revision 1.73  2001/06/28 09:27:06  adam
+ * Number of started sessions logged.
+ *
+ * Revision 1.72  2001/03/25 21:55:13  adam
  * Added odr_intdup. Ztest server returns TaskPackage for ItemUpdate.
  *
  * Revision 1.71  2001/03/21 12:43:36  adam
 #include <direct.h>
 #include "service.h"
 #else
+
+#ifdef _REENTRANT
 #if HAVE_PTHREAD_H
 #include <pthread.h>
+#elif HAVE_PTH_H
+#include <pth.h>
+#endif
 #endif
+
 #include <unistd.h>
 #include <pwd.h>
 #endif
@@ -590,6 +602,7 @@ void sigterm(int sig)
 }
 
 static void *new_session (void *vp);
+static int no_sessions = 0;
 
 /* UNIX listener */
 static void listener(IOCHAN h, int event)
@@ -605,6 +618,7 @@ static void listener(IOCHAN h, int event)
        {
            int res;
 
+            ++no_sessions;
            if (pipe(hand) < 0)
            {
                yaz_log(LOG_FATAL|LOG_ERRNO, "pipe");
@@ -697,8 +711,11 @@ static void listener(IOCHAN h, int event)
            close(hand[1]);
        }
        else
+       {
            iochan_setflags(h, EVENT_INPUT | EVENT_EXCEPT); /* reset listener */
-
+           ++no_sessions;
+       }
+#ifdef _REENTRANT
 #if HAVE_PTHREAD_H
        if (control_block.threads)
        {
@@ -708,6 +725,21 @@ static void listener(IOCHAN h, int event)
        }
        else
            new_session(new_line);
+#elif HAVE_PTH_H
+       if (control_block.threads)
+       {
+           pth_attr_t attr;
+           pth_t child_thread;
+
+            pth_attr_init (attr);
+            pth_attr_set (attr, PTH_ATTR_JOINABLE, FALSE);
+           child_thread = pth_spawn (attr, new_session, new_line);
+            pth_attr_destroy (attr);
+       }
+       else
+           new_session(new_line);
+#endif
+
 #else
        new_session(new_line);
 #endif
@@ -758,7 +790,7 @@ static void *new_session (void *vp)
     iochan_setdata(new_chan, newas);
     iochan_settimeout(new_chan, control_block.idle_timeout * 60);
     a = cs_addrstr(new_line);
-    yaz_log(LOG_LOG, "Accepted connection from %s", a ? a : "[Unknown]");
+    yaz_log(LOG_LOG, "Starting session %d from %s", no_sessions, a ? a : "[Unknown]");
     
     if (control_block.threads)
     {