MCPcopy Create free account
hub / github.com/catboost/catboost / Flock

Function Flock

util/system/flock.cpp:19–61  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

17 }
18
19 int Flock(void* hdl, int op) {
20 errno = 0;
21
22 if (hdl == INVALID_HANDLE_VALUE) {
23 errno = EBADF;
24 return -1;
25 }
26
27 DWORD low = 1, high = 0;
28 OVERLAPPED io;
29
30 Zero(io);
31
32 UnlockFileEx(hdl, 0, low, high, &io);
33
34 switch (op & ~LOCK_NB) {
35 case LOCK_EX:
36 case LOCK_SH: {
37 auto mode = ((op & ~LOCK_NB) == LOCK_EX) ? LOCKFILE_EXCLUSIVE_LOCK : 0;
38 if (op & LOCK_NB) {
39 if (LockFileEx(hdl, mode | LOCKFILE_FAIL_IMMEDIATELY, 0, low, high, &io)) {
40 return 0;
41 } else if (GetLastError() == ERROR_LOCK_VIOLATION) {
42 ClearLastSystemError();
43 errno = EWOULDBLOCK;
44 return -1;
45 }
46 } else {
47 if (LockFileEx(hdl, mode, 0, low, high, &io)) {
48 return 0;
49 }
50 }
51 break;
52 }
53 case LOCK_UN:
54 return 0;
55 break;
56 default:
57 break;
58 }
59 errno = EINVAL;
60 return -1;
61 }
62
63 int fsync(int fd) {
64 return _commit(fd);

Callers 1

flockFunction · 0.70

Calls 2

ZeroFunction · 0.85
ClearLastSystemErrorFunction · 0.85

Tested by

no test coverage detected