diff --git a/src/global.h.in b/src/global.h.in index 8737364..dbc7300 100644 --- a/src/global.h.in +++ b/src/global.h.in @@ -52,7 +52,7 @@ //check and return buffer size #define CHECK_RETURN_LEN() do { \ if (len > MAX_SIZE) \ - printf("Buffer truncated: %d, %d\n", len, MAX_SIZE); \ + printf("ERROR: Buffer truncated\n"); \ return len; \ } while (0) diff --git a/src/mpd_client.c b/src/mpd_client.c index 02bf58d..5d1cd84 100644 --- a/src/mpd_client.c +++ b/src/mpd_client.c @@ -1140,7 +1140,7 @@ static void mpd_client_idle(t_config *config, t_mpd_state *mpd_state) { printf("MPD connection failed.\n"); len = snprintf(buffer, MAX_SIZE, "{\"type\": \"disconnected\"}"); mpd_client_notify(buffer, len); - + // fall through case MPD_DISCONNECT: case MPD_RECONNECT: if (mpd_state->conn != NULL) diff --git a/src/tiny_queue.c b/src/tiny_queue.c index b71ea0c..fb22b8b 100644 --- a/src/tiny_queue.c +++ b/src/tiny_queue.c @@ -79,6 +79,7 @@ int tiny_queue_push(tiny_queue_t *queue, void *data) { } int tiny_queue_length(tiny_queue_t *queue, int timeout) { + timeout = timeout * 1000; int rc = pthread_mutex_lock(&queue->mutex); if (rc != 0) { printf("Error in pthread_mutex_lock: %d\n", rc); @@ -88,9 +89,14 @@ int tiny_queue_length(tiny_queue_t *queue, int timeout) { struct timespec max_wait = {0, 0}; clock_gettime(CLOCK_REALTIME, &max_wait); //timeout in ms - max_wait.tv_nsec += timeout * 1000; + if (max_wait.tv_nsec <= (999999999 - timeout)) { + max_wait.tv_nsec += timeout; + } else { + max_wait.tv_sec += 1; + max_wait.tv_nsec = timeout - (999999999 - max_wait.tv_nsec); + } rc = pthread_cond_timedwait(&queue->wakeup, &queue->mutex, &max_wait); - if (rc != 0) { + if (rc != 0 && rc != ETIMEDOUT) { printf("Error in pthread_cond_timedwait: %d\n", rc); } } @@ -103,6 +109,7 @@ int tiny_queue_length(tiny_queue_t *queue, int timeout) { } void *tiny_queue_shift(tiny_queue_t *queue, int timeout) { + timeout = timeout * 1000; int rc = pthread_mutex_lock(&queue->mutex); if (rc != 0) { printf("Error in pthread_mutex_lock: %d\n", rc); @@ -113,10 +120,18 @@ void *tiny_queue_shift(tiny_queue_t *queue, int timeout) { struct timespec max_wait = {0, 0}; clock_gettime(CLOCK_REALTIME, &max_wait); //timeout in ms - max_wait.tv_nsec += timeout * 1000; + if (max_wait.tv_nsec <= (999999999 - timeout)) { + max_wait.tv_nsec += timeout; + } else { + max_wait.tv_sec += 1; + max_wait.tv_nsec = timeout - (999999999 - max_wait.tv_nsec); + } rc = pthread_cond_timedwait(&queue->wakeup, &queue->mutex, &max_wait); if (rc != 0) { - printf("Error in pthread_cond_timedwait: %d\n", rc); + if (rc != ETIMEDOUT) { + printf("Error in pthread_cond_timedwait: %d\n", rc); + printf("nsec: %ld\n", max_wait.tv_nsec); + } rc = pthread_mutex_unlock(&queue->mutex); if (rc != 0) { printf("Error in pthread_mutex_unlock: %d\n", rc);