]> git.stg.codes - stg.git/blobdiff - projects/rlm_stg/iface.cpp
Limited waiting for response.
[stg.git] / projects / rlm_stg / iface.cpp
index d87366084fece4605ac83bef4c6bbcb609a8bcee..d99dd393f8037aeadd9482befb4d9d7d5bd5e65c 100644 (file)
@@ -89,12 +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) {