Lines Matching refs:data

21 bool initManagedData(bt_managed_data *data)
23 data->readCount = 0;
24 data->writeCount = 0;
26 data->readCountVar = 0;
27 data->writeCountVar = 0;
28 data->readerQueueVar = 0;
29 data->readerVar = 0;
30 data->writerVar = 0;
32 if ((data->readCountSem = create_sem(1, "Read Counter")) < 0)
35 if ((data->writeCountSem = create_sem(1, "Write Counter")) < 0)
37 delete_sem(data->readCountSem);
41 if ((data->readerQueue = create_sem(1, "Read Queue")) < 0)
43 delete_sem(data->writeCountSem);
44 delete_sem(data->readCountSem);
48 if ((data->reader = create_sem(1, "Single Reader")) < 0)
50 delete_sem(data->readerQueue);
51 delete_sem(data->writeCountSem);
52 delete_sem(data->readCountSem);
56 if ((data->writer = create_sem(1, "Writer")) < 0)
58 delete_sem(data->reader);
59 delete_sem(data->readerQueue);
60 delete_sem(data->writeCountSem);
61 delete_sem(data->readCountSem);
65 set_sem_owner(data->readCountSem, B_SYSTEM_TEAM);
66 set_sem_owner(data->writeCountSem, B_SYSTEM_TEAM);
67 set_sem_owner(data->readerQueue, B_SYSTEM_TEAM);
68 set_sem_owner(data->reader, B_SYSTEM_TEAM);
69 set_sem_owner(data->writer, B_SYSTEM_TEAM);
74 void closeManagedData(bt_managed_data *data)
76 data->readCount = data->writeCount = 0;
78 delete_sem(data->writer);
79 delete_sem(data->reader);
80 delete_sem(data->readerQueue);
81 delete_sem(data->writeCountSem);
82 delete_sem(data->readCountSem);
85 void beginReading(bt_managed_data *data)
87 btLock(data->readerQueue, &data->readerQueueVar);
88 btLock(data->reader, &data->readerVar);
89 btLock(data->readCountSem, &data->readCountVar);
91 data->readCount++;
92 if (data->readCount == 1)
93 btLock(data->writer, &data->writerVar);
95 btUnlock(data->readCountSem, &data->readCountVar);
96 btUnlock(data->reader, &data->readerVar);
97 btUnlock(data->readerQueue, &data->readerQueueVar);
100 void endReading(bt_managed_data *data)
102 btLock(data->readCountSem, &data->readCountVar);
104 data->readCount--;
105 if (data->readCount == 0)
106 btUnlock(data->writer, &data->writerVar);
108 btUnlock(data->readCountSem, &data->readCountVar);
111 void beginWriting(bt_managed_data *data)
113 btLock(data->writeCountSem, &data->writeCountVar);
115 data->writeCount++;
116 if (data->writeCount == 1)
117 btLock(data->reader, &data->readerVar);
119 btUnlock(data->writeCountSem, &data->writeCountVar);
120 btLock(data->writer, &data->writerVar);
123 void endWriting(bt_managed_data *data)
125 btUnlock(data->writer, &data->writerVar);
126 btLock(data->writeCountSem, &data->writeCountVar);
128 data->writeCount--;
129 if (data->writeCount == 0)
130 btUnlock(data->reader, &data->readerVar);
132 btUnlock(data->writeCountSem, &data->writeCountVar);