diff --git a/src/api.c b/src/api.c index 47c8f55..0f4fd00 100644 --- a/src/api.c +++ b/src/api.c @@ -473,12 +473,10 @@ static enum error api_ratelimit() MS_TO_TIMESPEC_L(ts, mswait); if (nanosleep(&ts, NULL) == -1) { - if (errno == EINTR) { - uio_error("Nanosleep got interrupted"); + if (errno == EINTR && should_exit) return ERR_SHOULD_EXIT; - } else { - uio_error("Nanosleep failed"); - } + else + uio_error("Nanosleep failed: %s", strerror(errno)); } return NOERR; @@ -694,7 +692,13 @@ static enum error api_cmd_base_pref(char buffer[API_BUFSIZE], int send_len, while (retry_count < API_MAX_TRYAGAIN && api_g_retry_count < API_MAX_TRYAGAIN) { long code; - ssize_t res_len = api_send(buffer, send_len, API_BUFSIZE); + char l_buff[API_BUFSIZE]; + ssize_t res_len; + + /* Need the copy because the response will be written here too, + * and we will send the response back when retrying */ + memcpy(l_buff, buffer, send_len); + res_len = api_send(buffer, send_len, API_BUFSIZE); if (res_len < 0) { if (res_len == -2 && should_exit) @@ -726,6 +730,8 @@ static enum error api_cmd_base_pref(char buffer[API_BUFSIZE], int send_len, goto end; } } + /* Copy the saved command back */ + memcpy(buffer, l_buff, send_len); continue; } @@ -735,8 +741,10 @@ static enum error api_cmd_base_pref(char buffer[API_BUFSIZE], int send_len, uio_debug("Let's try loggin in agane"); api_authed = false; /* We got logged out probably */ err = api_auth(); /* -> will call this function */ - if (api_g_retry_count < API_MAX_TRYAGAIN) + if (api_g_retry_count < API_MAX_TRYAGAIN) { + memcpy(buffer, l_buff, send_len); continue; + } } break; }