MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / initializeFastMutex

Function initializeFastMutex

src/common/isc_sync.cpp:2304–2390  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2302}
2303
2304static 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 {

Callers 1

ISC_mutex_initFunction · 0.85

Calls 2

setupMutexFunction · 0.85
switchToThreadFunction · 0.85

Tested by

no test coverage detected