diff --git a/include/my_pthread.h b/include/my_pthread.h index 7770c28f45f..104e91715e7 100644 --- a/include/my_pthread.h +++ b/include/my_pthread.h @@ -182,7 +182,7 @@ int pthread_cancel(pthread_t thread); #define pthread_key(T,V) pthread_key_t V #define my_pthread_getspecific_ptr(T,V) my_pthread_getspecific(T,(V)) #define my_pthread_setspecific_ptr(T,V) pthread_setspecific(T,(void*) (V)) -#define pthread_detach_this_thread() +#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(tmp); } #define pthread_handler_t EXTERNC void * typedef void *(* pthread_handler)(void *); diff --git a/storage/maria/ma_checkpoint.c b/storage/maria/ma_checkpoint.c index 2268ca62875..36b729e6053 100644 --- a/storage/maria/ma_checkpoint.c +++ b/storage/maria/ma_checkpoint.c @@ -340,7 +340,6 @@ int ma_checkpoint_init(ulong interval) { /* thread lives, will have to be killed */ checkpoint_control.status= THREAD_RUNNING; - pthread_detach(th); } } DBUG_RETURN(res); @@ -574,6 +573,8 @@ pthread_handler_t ma_checkpoint_background(void *arg) sleeps= 1; pages_to_flush_before_next_checkpoint= 0; + pthread_detach_this_thread(); + for(;;) /* iterations of checkpoints and dirty page flushing */ { #if 0 /* good for testing, to do a lot of checkpoints, finds a lot of bugs */