X-Git-Url: https://git.stg.codes/stg.git/blobdiff_plain/59d20816e25f345a8a9cb778f954f1aa955883e6..35b724400e504ae6f69a478339e4549475957bb9:/projects/rlm_stg/iface.cpp diff --git a/projects/rlm_stg/iface.cpp b/projects/rlm_stg/iface.cpp index 0cb30b93..d99dd393 100644 --- a/projects/rlm_stg/iface.cpp +++ b/projects/rlm_stg/iface.cpp @@ -89,13 +89,23 @@ STG_RESULT stgRequest(STG_CLIENT::TYPE type, const char* userName, const char* p return emptyResult(); } try { + if (!client->connected()) + { + if (!STG_CLIENT::reconnect()) + return emptyResult(); + client = STG_CLIENT::get(); + } response.done = false; client->request(type, toString(userName), toString(password), fromSTGPairs(pairs)); pthread_mutex_lock(&response.mutex); - while (!response.done) - pthread_cond_wait(&response.cond, &response.mutex); + timespec ts; + clock_gettime(CLOCK_REALTIME, &ts); + ts.tv_sec += 5; + int res = 0; + while (!response.done && res == 0) + res = pthread_cond_timedwait(&response.cond, &response.mutex, &ts); pthread_mutex_unlock(&response.mutex); - if (!response.status) + if (res != 0 || !response.status) return emptyResult(); return toResult(response.result); } catch (const STG_CLIENT::Error& ex) {