Commit e4f2bd46 authored by unknown's avatar unknown

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:
  - fix our implementation of pthread_cond_timedwait on OS2 to return
    ETIMEDOUT instead of ETIME.
sql/item_func.cc:
  - don't check for ETIME
sql/slave.cc:
  - don't check for ETIME
sql/sql_insert.cc:
  - don't check for ETIME
parent 20d8170a
...@@ -100,7 +100,7 @@ int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, ...@@ -100,7 +100,7 @@ int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
rc = DosWaitEventSem(cond->semaphore, timeout); rc = DosWaitEventSem(cond->semaphore, timeout);
if (rc != 0) if (rc != 0)
rval = ETIME; rval= ETIMEDOUT;
if (mutex) pthread_mutex_lock(mutex); if (mutex) pthread_mutex_lock(mutex);
......
...@@ -3157,7 +3157,7 @@ void debug_sync_point(const char* lock_name, uint lock_timeout) ...@@ -3157,7 +3157,7 @@ void debug_sync_point(const char* lock_name, uint lock_timeout)
THD* thd=current_thd; THD* thd=current_thd;
User_level_lock* ull; User_level_lock* ull;
struct timespec abstime; struct timespec abstime;
int lock_name_len,error=0; int lock_name_len;
lock_name_len=strlen(lock_name); lock_name_len=strlen(lock_name);
pthread_mutex_lock(&LOCK_user_locks); pthread_mutex_lock(&LOCK_user_locks);
...@@ -3191,8 +3191,8 @@ void debug_sync_point(const char* lock_name, uint lock_timeout) ...@@ -3191,8 +3191,8 @@ void debug_sync_point(const char* lock_name, uint lock_timeout)
set_timespec(abstime,lock_timeout); set_timespec(abstime,lock_timeout);
while (!thd->killed && while (!thd->killed &&
(error=pthread_cond_timedwait(&ull->cond,&LOCK_user_locks,&abstime)) pthread_cond_timedwait(&ull->cond, &LOCK_user_locks,
!= ETIME && error != ETIMEDOUT && ull->locked) ; &abstime) != ETIMEDOUT && ull->locked) ;
if (ull->locked) if (ull->locked)
{ {
if (!--ull->count) if (!--ull->count)
...@@ -3294,14 +3294,14 @@ longlong Item_func_get_lock::val_int() ...@@ -3294,14 +3294,14 @@ longlong Item_func_get_lock::val_int()
set_timespec(abstime,timeout); set_timespec(abstime,timeout);
while (!thd->killed && while (!thd->killed &&
(error=pthread_cond_timedwait(&ull->cond,&LOCK_user_locks,&abstime)) (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) if (thd->killed)
error=EINTR; // Return NULL error=EINTR; // Return NULL
if (ull->locked) if (ull->locked)
{ {
if (!--ull->count) if (!--ull->count)
delete ull; // Should never happen delete ull; // Should never happen
if (error != ETIME && error != ETIMEDOUT) if (error != ETIMEDOUT)
{ {
error=1; error=1;
null_value=1; // Return NULL null_value=1; // Return NULL
......
...@@ -2753,7 +2753,7 @@ int st_relay_log_info::wait_for_pos(THD* thd, String* log_name, ...@@ -2753,7 +2753,7 @@ int st_relay_log_info::wait_for_pos(THD* thd, String* log_name,
else else
pthread_cond_wait(&data_cond, &data_lock); pthread_cond_wait(&data_cond, &data_lock);
DBUG_PRINT("info",("Got signal of master update or timed out")); DBUG_PRINT("info",("Got signal of master update or timed out"));
if (error == ETIMEDOUT || error == ETIME) if (error == ETIMEDOUT)
{ {
error= -1; error= -1;
break; break;
......
...@@ -1730,7 +1730,7 @@ extern "C" pthread_handler_decl(handle_delayed_insert,arg) ...@@ -1730,7 +1730,7 @@ extern "C" pthread_handler_decl(handle_delayed_insert,arg)
#endif #endif
if (thd->killed || di->status) if (thd->killed || di->status)
break; break;
if (error == ETIME || error == ETIMEDOUT) if (error == ETIMEDOUT)
{ {
thd->killed= THD::KILL_CONNECTION; thd->killed= THD::KILL_CONNECTION;
break; break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment