diff options
author | Gluzskiy Alexandr <sss123next@list.ru> | 2010-10-08 07:01:44 +0300 |
---|---|---|
committer | Gluzskiy Alexandr <sss123next@list.ru> | 2010-10-08 07:01:44 +0300 |
commit | d5721b974a58ed5a26f33346dae728d93a7c1803 (patch) | |
tree | 2679ec39d8a44b5c3bdaf947d21881135460e7b7 /utilities.cpp | |
parent | 7df7cc0f3a8435c18e4491b04827deb47078b6d5 (diff) |
boost threads and mutexes, better error handling (thread's timeouts)
Diffstat (limited to 'utilities.cpp')
-rw-r--r-- | utilities.cpp | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/utilities.cpp b/utilities.cpp index 271afb2..2ad4cf2 100644 --- a/utilities.cpp +++ b/utilities.cpp @@ -517,10 +517,10 @@ static JABBER_HANDLER_FUNC SendHandler(IJabberInterface *ji, HXML node, void *pU params.out = &out; params.code = &code; params.result = &result; - HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)¶ms); - if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT) + boost::thread gpg_thread(boost::bind(&pxEexcute_thread, ¶ms)); + if(!gpg_thread.timed_join(boost::posix_time::seconds(10))) { - TerminateThread(gpg_thread, 0); + gpg_thread.~thread(); MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK); } if(result == pxNotFound) @@ -590,7 +590,7 @@ static JABBER_HANDLER_FUNC SendHandler(IJabberInterface *ji, HXML node, void *pU return FALSE; } -HANDLE sign_file_mutex = NULL; +boost::mutex sign_file_mutex; static JABBER_HANDLER_FUNC PrescenseHandler(IJabberInterface *ji, HXML node, void *pUserData) { @@ -617,8 +617,7 @@ static JABBER_HANDLER_FUNC PrescenseHandler(IJabberInterface *ji, HXML node, voi wstring path_out = path_c; mir_free(path_c); path_out += _T("\\sign.asc"); - WaitForSingleObject(sign_file_mutex, INFINITE); - sign_file_mutex = CreateMutex(NULL, FALSE, NULL); + sign_file_mutex.lock(); DeleteFile(path_out.c_str()); wfstream f(path_out.c_str(), std::ios::out); char *tmp = mir_utf8encodeW(sign.c_str()); @@ -629,7 +628,7 @@ static JABBER_HANDLER_FUNC PrescenseHandler(IJabberInterface *ji, HXML node, voi { if(errno == ENOENT) { - ReleaseMutex(sign_file_mutex); + sign_file_mutex.unlock(); debuglog<<"info: Failed to write sign in file\n"; return FALSE; } @@ -647,14 +646,14 @@ static JABBER_HANDLER_FUNC PrescenseHandler(IJabberInterface *ji, HXML node, voi params.out = &out; params.code = &code; params.result = &result; - HANDLE gpg_thread = mir_forkthread(pxEexcute_thread, (void*)¶ms); - if(WaitForSingleObject(gpg_thread, 10000) == WAIT_TIMEOUT) + boost::thread gpg_thread(boost::bind(&pxEexcute_thread, ¶ms)); + if(!gpg_thread.timed_join(boost::posix_time::seconds(10))) { - TerminateThread(gpg_thread, 0); + gpg_thread.~thread(); MessageBox(0, _T("GPG execution timed out, aborted"), _T(""), MB_OK); } DeleteFile(path_out.c_str()); - ReleaseMutex(sign_file_mutex); + sign_file_mutex.unlock(); if(result == pxNotFound) { MessageBox(0, _T("Set path to gpg.exe first!"), _T("Warning"), MB_OK); |