зеркало из https://github.com/mozilla/gecko-dev.git
Bug 808270 - Stub installer pings not always sent. r=jimm
This commit is contained in:
Родитель
14b7a56e24
Коммит
ee272af18e
|
@ -20,6 +20,7 @@ typedef DWORD FILESIZE_T; // Limit to 4GB for now...
|
|||
HINSTANCE g_hInst;
|
||||
NSIS::stack_t*g_pLocations = NULL;
|
||||
HANDLE g_hThread = NULL;
|
||||
HANDLE g_hGETStartedEvent = NULL;
|
||||
volatile UINT g_FilesTotal = 0;
|
||||
volatile UINT g_FilesCompleted = 0;
|
||||
volatile UINT g_Status = STATUS_INITIAL;
|
||||
|
@ -71,6 +72,14 @@ NSIS::stack_t* StackPopItem(NSIS::stack_t**ppST)
|
|||
|
||||
void Reset()
|
||||
{
|
||||
// The g_hGETStartedEvent event is used to make sure that the Get() call will
|
||||
// acquire the lock before the Reset() call acquires the lock.
|
||||
if (g_hGETStartedEvent) {
|
||||
WaitForSingleObject(g_hGETStartedEvent, INFINITE);
|
||||
CloseHandle(g_hGETStartedEvent);
|
||||
g_hGETStartedEvent = NULL;
|
||||
}
|
||||
|
||||
TaskLock_AcquireExclusive();
|
||||
#ifndef ONELOCKTORULETHEMALL
|
||||
StatsLock_AcquireExclusive();
|
||||
|
@ -83,8 +92,8 @@ void Reset()
|
|||
TerminateThread(g_hThread, ERROR_OPERATION_ABORTED);
|
||||
}
|
||||
CloseHandle(g_hThread);
|
||||
g_hThread = NULL;
|
||||
}
|
||||
g_hThread = NULL;
|
||||
g_FilesTotal = 0;
|
||||
g_FilesCompleted = 0;
|
||||
g_Status = STATUS_INITIAL;
|
||||
|
@ -122,6 +131,13 @@ startnexttask:
|
|||
hLocalFile = INVALID_HANDLE_VALUE;
|
||||
pFile = NULL;
|
||||
TaskLock_AcquireExclusive();
|
||||
// Now that we've acquired the lock, we can set the event to indicate this.
|
||||
// SetEvent will likely never fail, but if it does we should set it to NULL
|
||||
// to avoid anyone waiting on it.
|
||||
if (!SetEvent(g_hGETStartedEvent)) {
|
||||
CloseHandle(g_hGETStartedEvent);
|
||||
g_hGETStartedEvent = NULL;
|
||||
}
|
||||
pURL = g_pLocations;
|
||||
if (pURL)
|
||||
{
|
||||
|
@ -343,7 +359,11 @@ freeurlandexit:
|
|||
|
||||
if (!g_hThread)
|
||||
{
|
||||
DWORD tid;tid;
|
||||
DWORD tid;
|
||||
if (g_hGETStartedEvent) {
|
||||
CloseHandle(g_hGETStartedEvent);
|
||||
}
|
||||
g_hGETStartedEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
|
||||
g_hThread = CreateThread(NULL, 0, TaskThreadProc, NULL, 0, &tid);
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче