From 9c6f14aa3de16e34658f47cc78793547c27fe93b Mon Sep 17 00:00:00 2001 From: "konstantin@mysql.com" <> Date: Thu, 14 Jul 2005 19:42:56 +0400 Subject: [PATCH] Get rid of checking for ETIME return value of pthread_cond_timedwait. ETIME was returned by cond_timedwait (sic, the pre-POSIX1001b function) on Solaris 2.6 and 2.7. pthread_cond_timedwait on Solaris returns ETIMEDOUT. The standard requirement is that the only additional return value of pthred_cond_timedwait compared to pthread_cond_wait is ETIMEDOUT. Let us not bloat the application code with redundant checks, and if we're ever to work on a platform that returns a non-standard value, we should write a wrapper for that platform (like we do, e.g., for Windows). --- mysys/my_os2cond.c | 2 +- sql/item_func.cc | 10 +++++----- sql/slave.cc | 2 +- sql/sql_insert.cc | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/mysys/my_os2cond.c b/mysys/my_os2cond.c index e23afb89e66..83a03d62046 100644 --- a/mysys/my_os2cond.c +++ b/mysys/my_os2cond.c @@ -100,7 +100,7 @@ int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, rc = DosWaitEventSem(cond->semaphore, timeout); if (rc != 0) - rval = ETIME; + rval= ETIMEDOUT; if (mutex) pthread_mutex_lock(mutex); diff --git a/sql/item_func.cc b/sql/item_func.cc index 296083b256e..9e46aac0e25 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -3157,7 +3157,7 @@ void debug_sync_point(const char* lock_name, uint lock_timeout) THD* thd=current_thd; User_level_lock* ull; struct timespec abstime; - int lock_name_len,error=0; + int lock_name_len; lock_name_len=strlen(lock_name); pthread_mutex_lock(&LOCK_user_locks); @@ -3191,8 +3191,8 @@ void debug_sync_point(const char* lock_name, uint lock_timeout) set_timespec(abstime,lock_timeout); while (!thd->killed && - (error=pthread_cond_timedwait(&ull->cond,&LOCK_user_locks,&abstime)) - != ETIME && error != ETIMEDOUT && ull->locked) ; + pthread_cond_timedwait(&ull->cond, &LOCK_user_locks, + &abstime) != ETIMEDOUT && ull->locked) ; if (ull->locked) { if (!--ull->count) @@ -3294,14 +3294,14 @@ longlong Item_func_get_lock::val_int() set_timespec(abstime,timeout); while (!thd->killed && (error=pthread_cond_timedwait(&ull->cond,&LOCK_user_locks,&abstime)) - != ETIME && error != ETIMEDOUT && error != EINVAL && ull->locked) ; + != ETIMEDOUT && error != EINVAL && ull->locked) ; if (thd->killed) error=EINTR; // Return NULL if (ull->locked) { if (!--ull->count) delete ull; // Should never happen - if (error != ETIME && error != ETIMEDOUT) + if (error != ETIMEDOUT) { error=1; null_value=1; // Return NULL diff --git a/sql/slave.cc b/sql/slave.cc index c6c0de7160b..a587ac5a118 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -2753,7 +2753,7 @@ int st_relay_log_info::wait_for_pos(THD* thd, String* log_name, else pthread_cond_wait(&data_cond, &data_lock); DBUG_PRINT("info",("Got signal of master update or timed out")); - if (error == ETIMEDOUT || error == ETIME) + if (error == ETIMEDOUT) { error= -1; break; diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 5d30cad2926..125390e4411 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -1730,7 +1730,7 @@ extern "C" pthread_handler_decl(handle_delayed_insert,arg) #endif if (thd->killed || di->status) break; - if (error == ETIME || error == ETIMEDOUT) + if (error == ETIMEDOUT) { thd->killed= THD::KILL_CONNECTION; break;