mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
Restore NT4 compatibility, avoid W2K-only API
This commit is contained in:
parent
38025e96d5
commit
650837742a
@ -20,6 +20,19 @@
|
||||
|
||||
#include "ldap_pvt_thread.h"
|
||||
|
||||
typedef struct ldap_int_thread_s {
|
||||
long tid;
|
||||
HANDLE thd;
|
||||
} ldap_int_thread_s;
|
||||
|
||||
#ifndef NT_MAX_THREADS
|
||||
#define NT_MAX_THREADS 1024
|
||||
#endif
|
||||
|
||||
static ldap_int_thread_s tid[NT_MAX_THREADS];
|
||||
static int ntids;
|
||||
|
||||
|
||||
/* mingw compiler very sensitive about getting prototypes right */
|
||||
typedef unsigned __stdcall thrfunc_t(void *);
|
||||
|
||||
@ -50,7 +63,9 @@ ldap_pvt_thread_create( ldap_pvt_thread_t * thread,
|
||||
|
||||
if ( thd ) {
|
||||
*thread = (ldap_pvt_thread_t) tid;
|
||||
CloseHandle( thd );
|
||||
tid[ntids].tid = tid;
|
||||
tid[ntids].thd = thd;
|
||||
ntids++;
|
||||
rc = 0;
|
||||
}
|
||||
return rc;
|
||||
@ -66,12 +81,19 @@ int
|
||||
ldap_pvt_thread_join( ldap_pvt_thread_t thread, void **thread_return )
|
||||
{
|
||||
DWORD status;
|
||||
HANDLE thd;
|
||||
HANDLE __stdcall OpenThread( int, int, int );
|
||||
int i;
|
||||
|
||||
thd = OpenThread( SYNCHRONIZE, 0, thread );
|
||||
status = WaitForSingleObject( thd, INFINITE );
|
||||
CloseHandle( thd );
|
||||
for (i=0; i<ntids; i++) {
|
||||
if ( tid[i].tid == thread )
|
||||
break;
|
||||
}
|
||||
if ( i > ntids ) return -1;
|
||||
|
||||
status = WaitForSingleObject( tid[i].thd, INFINITE );
|
||||
for (; i<ntids; i++) {
|
||||
tid[i] = tid[i+1];
|
||||
}
|
||||
ntids--;
|
||||
return status == WAIT_FAILED ? -1 : 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user