Left: | ||
Right: |
OLD | NEW |
---|---|
1 #include "PluginStdAfx.h" | 1 #include "PluginStdAfx.h" |
2 | 2 |
3 #include "PluginMutex.h" | 3 #include "PluginMutex.h" |
4 #include "PluginClient.h" | 4 #include "PluginClient.h" |
5 #include "sddl.h" | 5 #include "sddl.h" |
6 | 6 |
7 | 7 |
8 CPluginMutex::CPluginMutex(const CString& name, int errorSubidBase) : m_isLocked (false), m_errorSubidBase(errorSubidBase), m_name(name) | 8 CPluginMutex::CPluginMutex(const std::wstring & name, int errorSubidBase) |
9 : m_isLocked(false), m_errorSubidBase(errorSubidBase), mutex_name( L"Global\\A dblockPlus" + name ) | |
9 { | 10 { |
10 if (m_errorSubidBase != PLUGIN_ERROR_MUTEX_DEBUG_FILE) | 11 if (m_errorSubidBase != PLUGIN_ERROR_MUTEX_DEBUG_FILE) |
11 { | 12 { |
12 DEBUG_MUTEX("Mutex::Create name:" + name) | 13 DEBUG_MUTEX( "Mutex::Create name:" + mutex_name ) |
13 } | 14 } |
14 | 15 m_hMutex = ::CreateMutexW( NULL, FALSE, mutex_name.c_str() ); |
15 m_hMutex = ::CreateMutex(NULL, FALSE, "Global\\AdblockPlus" + name); | |
16 | |
17 if (m_hMutex == NULL) | 16 if (m_hMutex == NULL) |
18 { | 17 { |
19 DWORD error = GetLastError(); | 18 DWORD error = GetLastError(); |
20 m_hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, "Global\\AdblockPlus" + name); | 19 m_hMutex = OpenMutexW( MUTEX_ALL_ACCESS, FALSE, mutex_name.c_str() ); |
21 if (m_hMutex == NULL) | 20 if (m_hMutex == NULL) |
22 { | 21 { |
23 m_hMutex = ::CreateMutex(NULL, FALSE, "Local\\AdblockPlus" + name); | 22 m_hMutex = ::CreateMutexW( NULL, FALSE, mutex_name.c_str() ); |
Oleksandr
2014/06/26 00:48:43
We should try to open a mutex in Local namespace i
Eric
2014/06/26 15:13:56
This a defect I introduced. I don't think I notice
| |
24 if (m_hMutex == NULL) | 23 if (m_hMutex == NULL) |
25 { | 24 { |
26 m_hMutex = OpenMutex(NULL, FALSE, "Local\\AdblockPlus" + name); | 25 m_hMutex = OpenMutexW( NULL, FALSE, mutex_name.c_str() ); |
27 if (m_hMutex == NULL) | 26 if (m_hMutex == NULL) |
28 { | 27 { |
29 DWORD error = GetLastError(); | 28 DWORD error = GetLastError(); |
30 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_MUTEX, PLUGIN_ERROR_MUT EX_CREATE + m_errorSubidBase, "Mutex::CreateMutex"); | 29 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_MUTEX, PLUGIN_ERROR_MUT EX_CREATE + m_errorSubidBase, L"Mutex::CreateMutex"); |
31 } | 30 } |
32 } | 31 } |
33 else | 32 else |
34 { | 33 { |
35 switch (::WaitForSingleObject(m_hMutex, 3000)) | 34 switch (::WaitForSingleObject(m_hMutex, 3000)) |
36 { | 35 { |
37 // The thread got ownership of the mutex | 36 // The thread got ownership of the mutex |
38 case WAIT_OBJECT_0: | 37 case WAIT_OBJECT_0: |
39 m_isLocked = true; | 38 m_isLocked = true; |
40 break; | 39 break; |
41 | 40 |
42 case WAIT_TIMEOUT: | 41 case WAIT_TIMEOUT: |
43 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_MUTEX, PLUGIN_ERROR_MUT EX_WAIT_TIMEOUT + m_errorSubidBase, "Mutex::CreateMutex - Timeout"); | 42 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_MUTEX, PLUGIN_ERROR_MUT EX_WAIT_TIMEOUT + m_errorSubidBase, L"Mutex::CreateMutex - Timeout"); |
44 m_hMutex = NULL; | 43 m_hMutex = NULL; |
45 break; | 44 break; |
46 | 45 |
47 case WAIT_FAILED: | 46 case WAIT_FAILED: |
48 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_MUTEX, PLUGIN_ERROR_MUT EX_WAIT + m_errorSubidBase, "Mutex::CreateMutex - Wait error"); | 47 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_MUTEX, PLUGIN_ERROR_MUT EX_WAIT + m_errorSubidBase, L"Mutex::CreateMutex - Wait error"); |
49 break; | 48 break; |
50 } | 49 } |
51 } | 50 } |
52 | 51 |
53 } | 52 } |
54 } | 53 } |
55 else | 54 else |
56 { | 55 { |
57 switch (::WaitForSingleObject(m_hMutex, 3000)) | 56 switch (::WaitForSingleObject(m_hMutex, 3000)) |
58 { | 57 { |
59 // The thread got ownership of the mutex | 58 // The thread got ownership of the mutex |
60 case WAIT_OBJECT_0: | 59 case WAIT_OBJECT_0: |
61 m_isLocked = true; | 60 m_isLocked = true; |
62 break; | 61 break; |
63 | 62 |
64 case WAIT_TIMEOUT: | 63 case WAIT_TIMEOUT: |
65 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_MUTEX, PLUGIN_ERROR_MUTEX_W AIT_TIMEOUT + m_errorSubidBase, "Mutex::CreateMutex - Timeout"); | 64 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_MUTEX, PLUGIN_ERROR_MUTEX_W AIT_TIMEOUT + m_errorSubidBase, L"Mutex::CreateMutex - Timeout"); |
66 m_hMutex = NULL; | 65 m_hMutex = NULL; |
67 break; | 66 break; |
68 | 67 |
69 case WAIT_FAILED: | 68 case WAIT_FAILED: |
70 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_MUTEX, PLUGIN_ERROR_MUTEX_W AIT + m_errorSubidBase, "Mutex::CreateMutex - Wait error"); | 69 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_MUTEX, PLUGIN_ERROR_MUTEX_W AIT + m_errorSubidBase, L"Mutex::CreateMutex - Wait error"); |
71 break; | 70 break; |
72 } | 71 } |
73 } | 72 } |
74 } | 73 } |
75 | 74 |
76 CPluginMutex::~CPluginMutex() | 75 CPluginMutex::~CPluginMutex() |
77 { | 76 { |
78 if (m_errorSubidBase != PLUGIN_ERROR_MUTEX_DEBUG_FILE) | 77 if (m_errorSubidBase != PLUGIN_ERROR_MUTEX_DEBUG_FILE) |
79 { | 78 { |
80 DEBUG_MUTEX("Mutex::Release name:" + m_name) | 79 DEBUG_MUTEX("Mutex::Release name:" + mutex_name) |
81 } | 80 } |
82 | 81 |
83 if (m_isLocked) | 82 if (m_isLocked) |
84 { | 83 { |
85 m_isLocked = false; | 84 m_isLocked = false; |
86 } | 85 } |
87 | 86 |
88 if (m_hMutex) | 87 if (m_hMutex) |
89 { | 88 { |
90 if (!::ReleaseMutex(m_hMutex)) | 89 if (!::ReleaseMutex(m_hMutex)) |
91 { | 90 { |
92 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_MUTEX, PLUGIN_ERROR_MUTEX_R ELEASE + m_errorSubidBase, "Mutex::ReleaseMutex"); | 91 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_MUTEX, PLUGIN_ERROR_MUTEX_R ELEASE + m_errorSubidBase, L"Mutex::ReleaseMutex"); |
93 } | 92 } |
94 } | 93 } |
95 | 94 |
96 m_hMutex = NULL; | 95 m_hMutex = NULL; |
97 } | 96 } |
98 | 97 |
99 bool CPluginMutex::IsLocked() const | 98 bool CPluginMutex::IsLocked() const |
100 { | 99 { |
101 return m_isLocked; | 100 return m_isLocked; |
102 } | 101 } |
OLD | NEW |