Mercurial > love-experiments
annotate src/modules/thread/Channel.cpp @ 1101:025c67973ad4 minor
Make Channels more thread-safe (I know, I know..)
| author | Bart van Strien <bart.bes+projects@gmail.com> |
|---|---|
| date | Wed, 04 Jul 2012 20:22:54 +0200 |
| parents | a74672ba1320 |
| children | fc7143cc0818 |
| rev | line source |
|---|---|
|
1098
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
1 /** |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
2 * Copyright (c) 2006-2012 LOVE Development Team |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
3 * |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
4 * This software is provided 'as-is', without any express or implied |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
5 * warranty. In no event will the authors be held liable for any damages |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
6 * arising from the use of this software. |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
7 * |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
8 * Permission is granted to anyone to use this software for any purpose, |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
9 * including commercial applications, and to alter it and redistribute it |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
10 * freely, subject to the following restrictions: |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
11 * |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
12 * 1. The origin of this software must not be misrepresented; you must not |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
13 * claim that you wrote the original software. If you use this software |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
14 * in a product, an acknowledgment in the product documentation would be |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
15 * appreciated but is not required. |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
16 * 2. Altered source versions must be plainly marked as such, and must not be |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
17 * misrepresented as being the original software. |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
18 * 3. This notice may not be removed or altered from any source distribution. |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
19 **/ |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
20 |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
21 #include "Channel.h" |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
22 #include <map> |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
23 #include <string> |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
24 |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
25 namespace love |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
26 { |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
27 namespace thread |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
28 { |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
29 static std::map<std::string, Channel*> namedChannels; |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
30 static Mutex *namedChannelMutex; |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
31 Channel *Channel::getChannel(const std::string &name) |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
32 { |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
33 if (!namedChannelMutex) |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
34 namedChannelMutex = newMutex(); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
35 Lock l(namedChannelMutex); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
36 if (!namedChannels.count(name)) |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
37 namedChannels[name] = new Channel(name); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
38 else |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
39 namedChannels[name]->retain(); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
40 return namedChannels[name]; |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
41 } |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
42 |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
43 Channel::Channel() |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
44 : named(false) |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
45 { |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
46 mutex = newMutex(); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
47 cond = newConditional(); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
48 } |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
49 |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
50 Channel::Channel(const std::string &name) |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
51 : named(true), name(name) |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
52 { |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
53 mutex = newMutex(); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
54 cond = newConditional(); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
55 } |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
56 |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
57 Channel::~Channel() |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
58 { |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
59 while (!queue.empty()) |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
60 { |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
61 queue.front()->release(); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
62 queue.pop(); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
63 } |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
64 |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
65 delete mutex; |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
66 delete cond; |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
67 if (named) |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
68 namedChannels.erase(name); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
69 } |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
70 |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
71 void Channel::push(Variant *var) |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
72 { |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
73 if (!var) |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
74 return; |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
75 Lock l(mutex); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
76 var->retain(); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
77 // Keep a reference to ourselves |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
78 // if we're non-empty and named. |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
79 if (named && queue.empty()) |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
80 retain(); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
81 queue.push(var); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
82 cond->signal(); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
83 } |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
84 |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
85 Variant *Channel::pop() |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
86 { |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
87 Lock l(mutex); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
88 if (queue.empty()) |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
89 return 0; |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
90 |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
91 Variant *var = queue.front(); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
92 queue.pop(); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
93 |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
94 // Release our reference to ourselves |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
95 // if we're empty and named. |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
96 if (named && queue.empty()) |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
97 release(); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
98 return var; |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
99 } // NOTE: Returns a retained Variant |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
100 |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
101 Variant *Channel::demand() |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
102 { |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
103 Variant *var; |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
104 while (!(var = pop())) |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
105 { |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
106 mutex->lock(); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
107 cond->wait(mutex); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
108 mutex->unlock(); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
109 } |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
110 return var; |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
111 } |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
112 |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
113 Variant *Channel::peek() |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
114 { |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
115 Lock l(mutex); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
116 if (queue.empty()) |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
117 return 0; |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
118 |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
119 Variant *var = queue.front(); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
120 var->retain(); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
121 return var; |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
122 } |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
123 |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
124 int Channel::count() |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
125 { |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
126 Lock l(mutex); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
127 return queue.size(); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
128 } |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
129 |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
130 void Channel::clear() |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
131 { |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
132 Lock l(mutex); |
|
1101
025c67973ad4
Make Channels more thread-safe (I know, I know..)
Bart van Strien <bart.bes+projects@gmail.com>
parents:
1098
diff
changeset
|
133 |
|
025c67973ad4
Make Channels more thread-safe (I know, I know..)
Bart van Strien <bart.bes+projects@gmail.com>
parents:
1098
diff
changeset
|
134 // We're already empty. |
|
025c67973ad4
Make Channels more thread-safe (I know, I know..)
Bart van Strien <bart.bes+projects@gmail.com>
parents:
1098
diff
changeset
|
135 if (queue.empty()) |
|
025c67973ad4
Make Channels more thread-safe (I know, I know..)
Bart van Strien <bart.bes+projects@gmail.com>
parents:
1098
diff
changeset
|
136 return; |
|
025c67973ad4
Make Channels more thread-safe (I know, I know..)
Bart van Strien <bart.bes+projects@gmail.com>
parents:
1098
diff
changeset
|
137 |
|
1098
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
138 while (!queue.empty()) |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
139 { |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
140 queue.front()->release(); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
141 queue.pop(); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
142 } |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
143 |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
144 // Once again, release our own |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
145 // reference if we're named. |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
146 if (named) |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
147 release(); |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
148 } |
|
1101
025c67973ad4
Make Channels more thread-safe (I know, I know..)
Bart van Strien <bart.bes+projects@gmail.com>
parents:
1098
diff
changeset
|
149 |
|
025c67973ad4
Make Channels more thread-safe (I know, I know..)
Bart van Strien <bart.bes+projects@gmail.com>
parents:
1098
diff
changeset
|
150 void Channel::release() |
|
025c67973ad4
Make Channels more thread-safe (I know, I know..)
Bart van Strien <bart.bes+projects@gmail.com>
parents:
1098
diff
changeset
|
151 { |
|
025c67973ad4
Make Channels more thread-safe (I know, I know..)
Bart van Strien <bart.bes+projects@gmail.com>
parents:
1098
diff
changeset
|
152 if (named) |
|
025c67973ad4
Make Channels more thread-safe (I know, I know..)
Bart van Strien <bart.bes+projects@gmail.com>
parents:
1098
diff
changeset
|
153 namedChannelMutex->lock(); |
|
025c67973ad4
Make Channels more thread-safe (I know, I know..)
Bart van Strien <bart.bes+projects@gmail.com>
parents:
1098
diff
changeset
|
154 |
|
025c67973ad4
Make Channels more thread-safe (I know, I know..)
Bart van Strien <bart.bes+projects@gmail.com>
parents:
1098
diff
changeset
|
155 Object::release(); |
|
025c67973ad4
Make Channels more thread-safe (I know, I know..)
Bart van Strien <bart.bes+projects@gmail.com>
parents:
1098
diff
changeset
|
156 |
|
025c67973ad4
Make Channels more thread-safe (I know, I know..)
Bart van Strien <bart.bes+projects@gmail.com>
parents:
1098
diff
changeset
|
157 if (named) |
|
025c67973ad4
Make Channels more thread-safe (I know, I know..)
Bart van Strien <bart.bes+projects@gmail.com>
parents:
1098
diff
changeset
|
158 namedChannelMutex->unlock(); |
|
025c67973ad4
Make Channels more thread-safe (I know, I know..)
Bart van Strien <bart.bes+projects@gmail.com>
parents:
1098
diff
changeset
|
159 } |
|
1098
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
160 } // thread |
|
a74672ba1320
Merge in channels from love-experiments
Bart van Strien <bart.bes+projects@gmail.com>
parents:
diff
changeset
|
161 } // love |
