| 2302 | } |
| 2303 | |
| 2304 | static bool initializeFastMutex(FAST_MUTEX* lpMutex, LPSECURITY_ATTRIBUTES lpAttributes, |
| 2305 | BOOL bInitialState, LPCSTR lpName) |
| 2306 | { |
| 2307 | if (pid == 0) |
| 2308 | pid = GetCurrentProcessId(); |
| 2309 | |
| 2310 | LPCSTR name = lpName; |
| 2311 | |
| 2312 | if (lpName && strlen(lpName) + strlen(FAST_MUTEX_EVT_NAME) - 2 >= MAXPATHLEN) |
| 2313 | { |
| 2314 | // this is the same error which CreateEvent will return for long name |
| 2315 | SetLastError(ERROR_FILENAME_EXCED_RANGE); |
| 2316 | return false; |
| 2317 | } |
| 2318 | |
| 2319 | setupMutex(lpMutex); |
| 2320 | |
| 2321 | char sz[MAXPATHLEN]; |
| 2322 | if (lpName) |
| 2323 | { |
| 2324 | sprintf(sz, FAST_MUTEX_EVT_NAME, lpName); |
| 2325 | name = sz; |
| 2326 | } |
| 2327 | |
| 2328 | #ifdef DONT_USE_FAST_MUTEX |
| 2329 | lpMutex->lpSharedInfo = NULL; |
| 2330 | lpMutex->hEvent = CreateMutex(lpAttributes, bInitialState, name); |
| 2331 | return (lpMutex->hEvent != NULL); |
| 2332 | #else |
| 2333 | lpMutex->hEvent = CreateEvent(lpAttributes, FALSE, FALSE, name); |
| 2334 | DWORD dwLastError = GetLastError(); |
| 2335 | |
| 2336 | if (lpMutex->hEvent) |
| 2337 | { |
| 2338 | SetHandleInformation(lpMutex->hEvent, HANDLE_FLAG_INHERIT, 0); |
| 2339 | |
| 2340 | if (lpName) |
| 2341 | sprintf(sz, FAST_MUTEX_MAP_NAME, lpName); |
| 2342 | |
| 2343 | lpMutex->hFileMap = CreateFileMapping( |
| 2344 | INVALID_HANDLE_VALUE, |
| 2345 | lpAttributes, |
| 2346 | PAGE_READWRITE, |
| 2347 | 0, |
| 2348 | sizeof(FAST_MUTEX_SHARED_SECTION), |
| 2349 | name); |
| 2350 | |
| 2351 | dwLastError = GetLastError(); |
| 2352 | |
| 2353 | if (lpMutex->hFileMap) |
| 2354 | { |
| 2355 | SetHandleInformation(lpMutex->hFileMap, HANDLE_FLAG_INHERIT, 0); |
| 2356 | |
| 2357 | lpMutex->lpSharedInfo = (FAST_MUTEX_SHARED_SECTION*) |
| 2358 | MapViewOfFile(lpMutex->hFileMap, FILE_MAP_WRITE, 0, 0, 0); |
| 2359 | |
| 2360 | if (lpMutex->lpSharedInfo) |
| 2361 | { |
no test coverage detected