diff options
| -rw-r--r-- | protocols/MRA/src/Mra_proto.cpp | 11 | 
1 files changed, 7 insertions, 4 deletions
diff --git a/protocols/MRA/src/Mra_proto.cpp b/protocols/MRA/src/Mra_proto.cpp index 4fdcebcf40..321c314025 100644 --- a/protocols/MRA/src/Mra_proto.cpp +++ b/protocols/MRA/src/Mra_proto.cpp @@ -8,6 +8,10 @@ DWORD CMraProto::StartConnect()  	if (!g_dwGlobalPluginRunning)
  		return ERROR_OPERATION_ABORTED;
 +	// поток ещё/уже не работал, поставили статус что работает и запускаем
 +	if (InterlockedCompareExchange((volatile LONG*)&m_dwThreadWorkerRunning, TRUE, FALSE))
 +		return 0;
 +
  	CMStringA szEmail;
  	mraGetStringA(NULL, "e-mail", szEmail);
 @@ -17,13 +21,12 @@ DWORD CMraProto::StartConnect()  	else if (!GetPassDB(szPass))
  		MraPopupShowFromAgentW(MRA_POPUP_TYPE_WARNING, 0, TranslateT("Please, setup password in options"));
  	else {
 -		// поток ещё/уже не работал, поставили статус что работает и запускаем
 -		if (InterlockedCompareExchange((volatile LONG*)&m_dwThreadWorkerRunning, TRUE, FALSE))
 -			return 0;
  		InterlockedExchange((volatile LONG*)&m_dwThreadWorkerLastPingTime, GetTickCount());
 -		ForkThreadEx(&CMraProto::MraThreadProc, NULL, 0);
 +		if (INVALID_HANDLE_VALUE == ForkThreadEx(&CMraProto::MraThreadProc, NULL, 0)) /* Thread create fail. */
 +			MraPopupShowFromAgentW(MRA_POPUP_TYPE_ERROR, 0, TranslateT("Thread create fail"));
  		return 0;
  	}
 +	InterlockedExchange((volatile LONG*)&m_dwThreadWorkerRunning, FALSE);
  	return ERROR_OPERATION_ABORTED;
  }
  | 
