]> git.sur5r.net Git - openldap/commitdiff
Some tweaks for OS/390 pthreads. Func signatures are different, return
authorHoward Chu <hyc@openldap.org>
Fri, 26 Jul 2002 03:15:25 +0000 (03:15 +0000)
committerHoward Chu <hyc@openldap.org>
Fri, 26 Jul 2002 03:15:25 +0000 (03:15 +0000)
val is 0/-1 with err in errno instead of in return val.

libraries/libldap_r/thr_posix.c

index 9178fba50656e93572ccccb95b5289543fe26c56..847e7270102d21cf112ccabcbcadfe9d7b05c0c4 100644 (file)
@@ -97,6 +97,10 @@ ldap_pvt_thread_create( ldap_pvt_thread_t * thread,
 #ifdef PTHREAD_CREATE_DETACHED
        } else {
                pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+#elif HAVE_PTHREAD_OS390
+       } else {
+               int st = __DETACHED;
+               pthread_attr_setdetachstate(&attr, &st);
 #endif
        }
 #endif
@@ -107,6 +111,9 @@ ldap_pvt_thread_create( ldap_pvt_thread_t * thread,
 #endif
 
        rtn = pthread_create( thread, &attr, start_routine, arg );
+#ifdef HAVE_PTHREAD_OS390
+       if ( rtn == -1 ) rtn = errno;
+#endif
 
 #if !defined( PTHREAD_CREATE_JOINABLE ) && !defined( PTHREAD_UNDETACHED )
        if( detach ) {
@@ -141,14 +148,26 @@ ldap_pvt_thread_join( ldap_pvt_thread_t thread, void **thread_return )
        if (thread_return==NULL)
          thread_return=&dummy;
 #endif 
+#ifdef HAVE_PTHREAD_OS390
+       int st = pthread_join( thread, thread_return ); 
+       if ( st == -1 ) st = errno;
+       return st;
+#else
        return pthread_join( thread, thread_return );
+#endif
 }
 
 int 
 ldap_pvt_thread_kill( ldap_pvt_thread_t thread, int signo )
 {
 #ifdef HAVE_PTHREAD_KILL
+#ifdef HAVE_PTHREAD_OS390
+       int st = pthread_kill( thread, signo );
+       if ( st == -1 ) st = errno;
+       return st;
+#else
        return pthread_kill( thread, signo );
+#endif
 #else
        /* pthread package with DCE */
        if (kill( getpid(), signo )<0)
@@ -168,7 +187,11 @@ ldap_pvt_thread_yield( void )
        return sched_yield();
 
 #elif HAVE_PTHREAD_YIELD
+#if HAVE_PTHREAD_OS390
+       pthread_yield(NULL);
+#else
        pthread_yield();
+#endif
        return 0;
 
 #elif HAVE_THR_YIELD