Lines Matching refs:data

10 bool initManagedData(bt_managed_data *data)

12 data->readCount = 0;
13 data->writeCount = 0;
15 if (!(data->readCountSem = CreateSemaphore(NULL, 1, 1, NULL)))
18 if (!(data->writeCountSem = CreateSemaphore(NULL, 1, 1, NULL)))
20 CloseHandle(data->readCountSem);
24 if (!(data->readerQueue = CreateSemaphore(NULL, 1, 1, NULL)))
26 CloseHandle(data->writeCountSem);
27 CloseHandle(data->readCountSem);
31 if (!(data->reader = CreateSemaphore(NULL, 1, 1, NULL)))
33 CloseHandle(data->readerQueue);
34 CloseHandle(data->writeCountSem);
35 CloseHandle(data->readCountSem);
39 if (!(data->writer = CreateSemaphore(NULL, 1, 1, NULL)))
41 CloseHandle(data->reader);
42 CloseHandle(data->readerQueue);
43 CloseHandle(data->writeCountSem);
44 CloseHandle(data->readCountSem);
51 void closeManagedData(bt_managed_data *data)
53 data->readCount = data->writeCount = 0;
55 CloseHandle(data->writer);
56 CloseHandle(data->reader);
57 CloseHandle(data->readerQueue);
58 CloseHandle(data->writeCountSem);
59 CloseHandle(data->readCountSem);
62 void beginReading(bt_managed_data *data)
64 WaitForSingleObject(data->readerQueue, INFINITE);
65 WaitForSingleObject(data->reader, INFINITE);
66 WaitForSingleObject(data->readCountSem, INFINITE);
68 data->readCount++;
69 if (data->readCount == 1)
70 WaitForSingleObject(data->writer, INFINITE);
72 ReleaseSemaphore(data->readCountSem, 1, NULL);
73 ReleaseSemaphore(data->reader, 1, NULL);
74 ReleaseSemaphore(data->readerQueue, 1, NULL);
77 void endReading(bt_managed_data *data)
79 WaitForSingleObject(data->readCountSem, INFINITE);
81 data->readCount--;
82 if (data->readCount == 0)
83 ReleaseSemaphore(data->writer, 1, NULL);
85 ReleaseSemaphore(data->readCountSem, 1, NULL);
88 void beginWriting(bt_managed_data *data)
90 WaitForSingleObject(data->writeCountSem, INFINITE);
92 data->writeCount++;
93 if (data->writeCount == 1)
94 WaitForSingleObject(data->reader, INFINITE);
96 ReleaseSemaphore(data->writeCountSem, 1, NULL);
97 WaitForSingleObject(data->writer, INFINITE);
100 void endWriting(bt_managed_data *data)
102 ReleaseSemaphore(data->writer, 1, NULL);
103 WaitForSingleObject(data->writeCountSem, INFINITE);
105 data->writeCount--;
106 if (data->writeCount == 0)
107 ReleaseSemaphore(data->reader, 1, NULL);
109 ReleaseSemaphore(data->writeCountSem, 1, NULL);