if (timer == NULL || !timer->inuse)
if (! timer_valid (timer))
timer_delete (timerid)     timer_t timerid;{  struct timer_node *timer;  int retval = -1;  pthread_mutex_lock (&__timer_mutex);  timer = timer_id2ptr (timerid);  if (timer == NULL || !timer->inuse)    /* Invalid timer ID or the timer is not in use.  */    errno = EINVAL;  else    {      if (timer->armed)	{	  struct thread_node *thread = timer->thread;	  assert (thread != NULL);	  /* If thread is cancelled while waiting for handler to terminate,	     the mutex is unlocked and timer_delete is aborted.  */	  pthread_cleanup_push (__timer_mutex_cancel_handler, &__timer_mutex);	    /* If timer is currently being serviced, wait for it to finish.  */	    while (thread->current_timer == timer)	      pthread_cond_wait (&thread->cond, &__timer_mutex);	    pthread_cleanup_pop (0);        }      /* Remove timer from whatever queue it may be on and deallocate it.  */      list_unlink_ip (&timer->links);      __timer_dealloc (timer);      retval = 0;    }  pthread_mutex_unlock (&__timer_mutex);  return retval;}