8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-23 14:03:07 +01:00

Restore separate datatypes for thread ID and handle according to Vlad's request. They match on posix build, but supposed to be different on windows.

This commit is contained in:
alexpeshkoff 2012-03-01 15:47:01 +00:00
parent 4041b0e780
commit bb034da477
2 changed files with 20 additions and 13 deletions

View File

@ -93,7 +93,7 @@ THREAD_ENTRY_DECLARE threadStart(THREAD_ENTRY_PARAM arg)
#ifdef USE_POSIX_THREADS #ifdef USE_POSIX_THREADS
#define START_THREAD #define START_THREAD
void Thread::start(ThreadEntryPoint* routine, void* arg, int priority_arg, ThreadId* thd_id) void Thread::start(ThreadEntryPoint* routine, void* arg, int priority_arg, Handle* thd_id)
{ {
/************************************** /**************************************
* *
@ -173,14 +173,14 @@ void Thread::start(ThreadEntryPoint* routine, void* arg, int priority_arg, Threa
} }
} }
void Thread::waitForCompletion(ThreadId& thread) void Thread::waitForCompletion(Handle& thread)
{ {
int state = pthread_join(thread, NULL); int state = pthread_join(thread, NULL);
if (state) if (state)
Firebird::system_call_failed::raise("pthread_join", state); Firebird::system_call_failed::raise("pthread_join", state);
} }
void Thread::kill(ThreadId& thread) void Thread::kill(Handle& thread)
{ {
int state = pthread_cancel(thread); int state = pthread_cancel(thread);
if (state) if (state)
@ -192,7 +192,7 @@ void Thread::kill(ThreadId& thread)
#ifdef WIN_NT #ifdef WIN_NT
#define START_THREAD #define START_THREAD
void Thread::start(ThreadEntryPoint* routine, void* arg, int priority_arg, ThreadId* thd_id) void Thread::start(ThreadEntryPoint* routine, void* arg, int priority_arg, Handle* thd_id)
{ {
/************************************** /**************************************
* *
@ -258,14 +258,14 @@ void Thread::start(ThreadEntryPoint* routine, void* arg, int priority_arg, Threa
} }
} }
void Thread::waitForCompletion(ThreadId& handle) void Thread::waitForCompletion(Handle& handle)
{ {
WaitForSingleObject(handle, INFINITE); WaitForSingleObject(handle, INFINITE);
CloseHandle(handle); CloseHandle(handle);
handle = 0; handle = 0;
} }
void Thread::kill(ThreadId& handle) void Thread::kill(Handle& handle)
{ {
TerminateThread(handle, -1); TerminateThread(handle, -1);
CloseHandle(handle); CloseHandle(handle);
@ -276,7 +276,7 @@ void Thread::kill(ThreadId& handle)
#ifndef START_THREAD #ifndef START_THREAD
void Thread::start(ThreadEntryPoint* routine, void* arg, int priority_arg, ThreadId* thd_id) void Thread::start(ThreadEntryPoint* routine, void* arg, int priority_arg, Handle* thd_id)
{ {
/************************************** /**************************************
* *
@ -291,11 +291,11 @@ void Thread::start(ThreadEntryPoint* routine, void* arg, int priority_arg, Threa
} }
void Thread::waitForCompletion(ThreadId&) void Thread::waitForCompletion(Handle&)
{ {
} }
void Thread::kill(ThreadId&) void Thread::kill(Handle&)
{ {
} }
#endif // START_THREAD #endif // START_THREAD

View File

@ -30,7 +30,6 @@
#ifndef JRD_THREADSTART_H #ifndef JRD_THREADSTART_H
#define JRD_THREADSTART_H #define JRD_THREADSTART_H
#include "firebird.h"
#include "../common/thd.h" #include "../common/thd.h"
#include "../common/ThreadData.h" #include "../common/ThreadData.h"
@ -54,9 +53,17 @@ typedef THREAD_ENTRY_DECLARE ThreadEntryPoint(THREAD_ENTRY_PARAM);
class Thread class Thread
{ {
public: public:
static void start(ThreadEntryPoint* routine, void* arg, int priority_arg, ThreadId* thd_id = NULL); #ifdef WIN_NT
static void waitForCompletion(ThreadId& handle); typedef HANDLE Handle;
static void kill(ThreadId& handle); #endif
#ifdef USE_POSIX_THREADS
typedef pthread_t Handle;
#endif
static void start(ThreadEntryPoint* routine, void* arg, int priority_arg, Handle* p_handle = NULL);
static void waitForCompletion(Handle& handle);
static void kill(Handle& handle);
}; };
#endif // JRD_THREADSTART_H #endif // JRD_THREADSTART_H