slave 1.2.2 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,419 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
- <head>
8
- <title>Class: Slave::LifeLine</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
12
- <script type="text/javascript">
13
- // <![CDATA[
14
-
15
- function popupCode( url ) {
16
- window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
- }
18
-
19
- function toggleCode( id ) {
20
- if ( document.getElementById )
21
- elem = document.getElementById( id );
22
- else if ( document.all )
23
- elem = eval( "document.all." + id );
24
- else
25
- return false;
26
-
27
- elemStyle = elem.style;
28
-
29
- if ( elemStyle.display != "block" ) {
30
- elemStyle.display = "block"
31
- } else {
32
- elemStyle.display = "none"
33
- }
34
-
35
- return true;
36
- }
37
-
38
- // Make codeblocks hidden by default
39
- document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
-
41
- // ]]>
42
- </script>
43
-
44
- </head>
45
- <body>
46
-
47
-
48
-
49
- <div id="classHeader">
50
- <table class="header-table">
51
- <tr class="top-aligned-row">
52
- <td><strong>Class</strong></td>
53
- <td class="class-name-in-header">Slave::LifeLine</td>
54
- </tr>
55
- <tr class="top-aligned-row">
56
- <td><strong>In:</strong></td>
57
- <td>
58
- <a href="../../files/lib/slave_rb.html">
59
- lib/slave.rb
60
- </a>
61
- <br />
62
- </td>
63
- </tr>
64
-
65
- <tr class="top-aligned-row">
66
- <td><strong>Parent:</strong></td>
67
- <td>
68
- Object
69
- </td>
70
- </tr>
71
- </table>
72
- </div>
73
- <!-- banner header -->
74
-
75
- <div id="bodyContent">
76
-
77
-
78
-
79
- <div id="contextContent">
80
- <div id="diagram">
81
- <map id="map" name="map">
82
- <area shape="rect" coords="27,50,99,98" href="../Slave.html" alt="Slave" />
83
- </map>
84
- <img src="../../dot/f_1.jpg" usemap="#map" border="0" alt="dot/f_1.jpg">
85
- </div>
86
-
87
- <div id="description">
88
- <p>
89
- the <a href="LifeLine.html">LifeLine</a> class is used to communitacte
90
- between child and parent processes and to prevent child processes from ever
91
- becoming zombies or otherwise abandoned by their parents. the basic concept
92
- is that a socket pair is setup between child and parent. the child process,
93
- because it is a <a href="../Slave.html">Slave</a>, sets up a handler such
94
- that, should it&#8216;s socket ever grow stale, will exit the process. this
95
- class replaces the HeartBeat class from previous <a
96
- href="../Slave.html">Slave</a> versions.
97
- </p>
98
-
99
- </div>
100
-
101
-
102
- </div>
103
-
104
- <div id="method-list">
105
- <h3 class="section-bar">Methods</h3>
106
-
107
- <div class="name-list">
108
- <a href="#M000025">catch</a>&nbsp;&nbsp;
109
- <a href="#M000029">cling</a>&nbsp;&nbsp;
110
- <a href="#M000026">close_unused_sockets_after_forking</a>&nbsp;&nbsp;
111
- <a href="#M000027">cut</a>&nbsp;&nbsp;
112
- <a href="#M000022">new</a>&nbsp;&nbsp;
113
- <a href="#M000028">on_cut</a>&nbsp;&nbsp;
114
- <a href="#M000023">owner?</a>&nbsp;&nbsp;
115
- <a href="#M000024">throw</a>&nbsp;&nbsp;
116
- </div>
117
- </div>
118
-
119
- </div>
120
-
121
-
122
- <!-- if includes -->
123
-
124
- <div id="section">
125
-
126
-
127
- <div id="constants-list">
128
- <h3 class="section-bar">Constants</h3>
129
-
130
- <div class="name-list">
131
- <table summary="Constants">
132
- <tr class="top-aligned-row context-row">
133
- <td class="context-item-name">FDS</td>
134
- <td>=</td>
135
- <td class="context-item-value">ThreadSafeHash.new</td>
136
- </tr>
137
- <tr class="top-aligned-row context-row">
138
- <td class="context-item-name">DELEGATED</td>
139
- <td>=</td>
140
- <td class="context-item-value">%w( puts gets read write close flush each )</td>
141
- </tr>
142
- </table>
143
- </div>
144
- </div>
145
-
146
- <div id="aliases-list">
147
- <h3 class="section-bar">External Aliases</h3>
148
-
149
- <div class="name-list">
150
- <table summary="aliases">
151
- <tr class="top-aligned-row context-row">
152
- <td class="context-item-name">"cut"</td>
153
- <td>-&gt;</td>
154
- <td class="context-item-value">"release"</td>
155
- </tr>
156
- </table>
157
- </div>
158
- </div>
159
-
160
-
161
-
162
-
163
-
164
- <!-- if method_list -->
165
- <div id="methods">
166
- <h3 class="section-bar">Public Class methods</h3>
167
-
168
- <div id="method-M000022" class="method-detail">
169
- <a name="M000022"></a>
170
-
171
- <div class="method-heading">
172
- <a href="#M000022" class="method-signature">
173
- <span class="method-name">new</span><span class="method-args">()</span>
174
- </a>
175
- </div>
176
-
177
- <div class="method-description">
178
- <p><a class="source-toggle" href="#"
179
- onclick="toggleCode('M000022-source');return false;">[Source]</a></p>
180
- <div class="method-source-code" id="M000022-source">
181
- <pre>
182
- <span class="ruby-comment cmt"># File lib/slave.rb, line 171</span>
183
- 171: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>
184
- 172: <span class="ruby-ivar">@pair</span> = <span class="ruby-constant">Socket</span>.<span class="ruby-identifier">pair</span> <span class="ruby-constant">Socket</span><span class="ruby-operator">::</span><span class="ruby-constant">AF_UNIX</span>, <span class="ruby-constant">Socket</span><span class="ruby-operator">::</span><span class="ruby-constant">SOCK_STREAM</span>, <span class="ruby-value">0</span>
185
- 173: <span class="ruby-ivar">@owner</span> = <span class="ruby-constant">Process</span>.<span class="ruby-identifier">pid</span>
186
- 174: <span class="ruby-ivar">@pid</span> = <span class="ruby-keyword kw">nil</span>
187
- 175: <span class="ruby-ivar">@socket</span> = <span class="ruby-keyword kw">nil</span>
188
- 176: <span class="ruby-ivar">@object_id</span> = <span class="ruby-identifier">object_id</span>
189
- 177:
190
- 178: <span class="ruby-ivar">@fds</span> = <span class="ruby-ivar">@pair</span>.<span class="ruby-identifier">map</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">fileno</span>}
191
- 179: <span class="ruby-identifier">oid</span>, <span class="ruby-identifier">fds</span> = <span class="ruby-ivar">@object_id</span>, <span class="ruby-ivar">@fds</span>
192
- 180: <span class="ruby-constant">FDS</span>[<span class="ruby-identifier">oid</span>] = <span class="ruby-identifier">fds</span>
193
- 181: <span class="ruby-constant">ObjectSpace</span>.<span class="ruby-identifier">define_finalizer</span>(<span class="ruby-keyword kw">self</span>){ <span class="ruby-constant">FDS</span>.<span class="ruby-identifier">delete</span> <span class="ruby-identifier">oid</span> }
194
- 182: <span class="ruby-keyword kw">end</span>
195
- </pre>
196
- </div>
197
- </div>
198
- </div>
199
-
200
- <h3 class="section-bar">Public Instance methods</h3>
201
-
202
- <div id="method-M000025" class="method-detail">
203
- <a name="M000025"></a>
204
-
205
- <div class="method-heading">
206
- <a href="#M000025" class="method-signature">
207
- <span class="method-name">catch</span><span class="method-args">(*ignored)</span>
208
- </a>
209
- </div>
210
-
211
- <div class="method-description">
212
- <p><a class="source-toggle" href="#"
213
- onclick="toggleCode('M000025-source');return false;">[Source]</a></p>
214
- <div class="method-source-code" id="M000025-source">
215
- <pre>
216
- <span class="ruby-comment cmt"># File lib/slave.rb, line 197</span>
217
- 197: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">catch</span> <span class="ruby-operator">*</span><span class="ruby-identifier">ignored</span>
218
- 198: <span class="ruby-identifier">raise</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">owner?</span>
219
- 199: <span class="ruby-ivar">@pair</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">close</span>
220
- 200: <span class="ruby-ivar">@pair</span>[<span class="ruby-value">0</span>] = <span class="ruby-keyword kw">nil</span>
221
- 201: <span class="ruby-ivar">@pid</span> = <span class="ruby-constant">Process</span>.<span class="ruby-identifier">pid</span>
222
- 202: <span class="ruby-ivar">@socket</span> = <span class="ruby-ivar">@pair</span>[<span class="ruby-value">-1</span>]
223
- 203: <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">sync</span> = <span class="ruby-keyword kw">true</span>
224
- 204: <span class="ruby-identifier">close_unused_sockets_after_forking</span>
225
- 205: <span class="ruby-keyword kw">end</span>
226
- </pre>
227
- </div>
228
- </div>
229
- </div>
230
-
231
- <div id="method-M000029" class="method-detail">
232
- <a name="M000029"></a>
233
-
234
- <div class="method-heading">
235
- <a href="#M000029" class="method-signature">
236
- <span class="method-name">cling</span><span class="method-args">(&amp;b)</span>
237
- </a>
238
- </div>
239
-
240
- <div class="method-description">
241
- <p><a class="source-toggle" href="#"
242
- onclick="toggleCode('M000029-source');return false;">[Source]</a></p>
243
- <div class="method-source-code" id="M000029-source">
244
- <pre>
245
- <span class="ruby-comment cmt"># File lib/slave.rb, line 265</span>
246
- 265: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">cling</span> <span class="ruby-operator">&amp;</span><span class="ruby-identifier">b</span>
247
- 266: <span class="ruby-identifier">on_cut</span>{ <span class="ruby-keyword kw">begin</span>; <span class="ruby-identifier">b</span>.<span class="ruby-identifier">call</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">b</span>; <span class="ruby-keyword kw">ensure</span>; <span class="ruby-constant">Kernel</span>.<span class="ruby-identifier">exit</span>; <span class="ruby-keyword kw">end</span> }.<span class="ruby-identifier">join</span>
248
- 267: <span class="ruby-keyword kw">end</span>
249
- </pre>
250
- </div>
251
- </div>
252
- </div>
253
-
254
- <div id="method-M000026" class="method-detail">
255
- <a name="M000026"></a>
256
-
257
- <div class="method-heading">
258
- <a href="#M000026" class="method-signature">
259
- <span class="method-name">close_unused_sockets_after_forking</span><span class="method-args">()</span>
260
- </a>
261
- </div>
262
-
263
- <div class="method-description">
264
- <p><a class="source-toggle" href="#"
265
- onclick="toggleCode('M000026-source');return false;">[Source]</a></p>
266
- <div class="method-source-code" id="M000026-source">
267
- <pre>
268
- <span class="ruby-comment cmt"># File lib/slave.rb, line 207</span>
269
- 207: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">close_unused_sockets_after_forking</span>
270
- 208: <span class="ruby-keyword kw">begin</span>
271
- 209: <span class="ruby-identifier">to_delete</span> = []
272
- 210: <span class="ruby-keyword kw">begin</span>
273
- 211: <span class="ruby-constant">FDS</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">oid</span>, <span class="ruby-identifier">fds</span><span class="ruby-operator">|</span>
274
- 212: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">oid</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@object_id</span>
275
- 213: <span class="ruby-keyword kw">begin</span>
276
- 214: <span class="ruby-constant">IO</span>.<span class="ruby-identifier">for_fd</span>(<span class="ruby-identifier">fds</span>.<span class="ruby-identifier">first</span>).<span class="ruby-identifier">close</span>
277
- 215: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
278
- 216: <span class="ruby-constant">STDERR</span>.<span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;#{ e.message } (#{ e.class })\n#{ e.backtrace.join 10.chr }&quot;</span>
279
- 217: <span class="ruby-keyword kw">ensure</span>
280
- 218: <span class="ruby-identifier">to_delete</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">oid</span>
281
- 219: <span class="ruby-keyword kw">end</span>
282
- 220: <span class="ruby-keyword kw">end</span>
283
- 221: <span class="ruby-keyword kw">ensure</span>
284
- 222: <span class="ruby-constant">FDS</span>.<span class="ruby-identifier">ex</span>{ <span class="ruby-identifier">to_delete</span>.<span class="ruby-identifier">each</span>{<span class="ruby-operator">|</span><span class="ruby-identifier">oid</span><span class="ruby-operator">|</span> <span class="ruby-constant">FDS</span>.<span class="ruby-identifier">delete</span> <span class="ruby-identifier">oid</span> <span class="ruby-keyword kw">rescue</span> <span class="ruby-value">42</span>} }
285
- 223: <span class="ruby-keyword kw">end</span>
286
- 224: <span class="ruby-constant">GC</span>.<span class="ruby-identifier">start</span>
287
- 225: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
288
- 226: <span class="ruby-value">42</span>
289
- 227: <span class="ruby-keyword kw">end</span>
290
- 228: <span class="ruby-keyword kw">end</span>
291
- </pre>
292
- </div>
293
- </div>
294
- </div>
295
-
296
- <div id="method-M000027" class="method-detail">
297
- <a name="M000027"></a>
298
-
299
- <div class="method-heading">
300
- <a href="#M000027" class="method-signature">
301
- <span class="method-name">cut</span><span class="method-args">()</span>
302
- </a>
303
- </div>
304
-
305
- <div class="method-description">
306
- <p><a class="source-toggle" href="#"
307
- onclick="toggleCode('M000027-source');return false;">[Source]</a></p>
308
- <div class="method-source-code" id="M000027-source">
309
- <pre>
310
- <span class="ruby-comment cmt"># File lib/slave.rb, line 230</span>
311
- 230: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">cut</span>
312
- 231: <span class="ruby-identifier">raise</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">owner?</span>
313
- 232: <span class="ruby-identifier">raise</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@socket</span>
314
- 233: <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">close</span> <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">nil</span>
315
- 234: <span class="ruby-constant">FDS</span>.<span class="ruby-identifier">delete</span> <span class="ruby-identifier">object_id</span>
316
- 235: <span class="ruby-keyword kw">end</span>
317
- </pre>
318
- </div>
319
- </div>
320
- </div>
321
-
322
- <div id="method-M000028" class="method-detail">
323
- <a name="M000028"></a>
324
-
325
- <div class="method-heading">
326
- <a href="#M000028" class="method-signature">
327
- <span class="method-name">on_cut</span><span class="method-args">(&amp;b)</span>
328
- </a>
329
- </div>
330
-
331
- <div class="method-description">
332
- <p><a class="source-toggle" href="#"
333
- onclick="toggleCode('M000028-source');return false;">[Source]</a></p>
334
- <div class="method-source-code" id="M000028-source">
335
- <pre>
336
- <span class="ruby-comment cmt"># File lib/slave.rb, line 250</span>
337
- 250: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">on_cut</span> <span class="ruby-operator">&amp;</span><span class="ruby-identifier">b</span>
338
- 251: <span class="ruby-identifier">at_exit</span>{ <span class="ruby-keyword kw">begin</span>; <span class="ruby-identifier">b</span>.<span class="ruby-identifier">call</span>; <span class="ruby-keyword kw">ensure</span>; <span class="ruby-identifier">b</span> = <span class="ruby-keyword kw">nil</span>; <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">b</span>}
339
- 252: <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">new</span>(<span class="ruby-constant">Thread</span>.<span class="ruby-identifier">current</span>){<span class="ruby-operator">|</span><span class="ruby-identifier">current</span><span class="ruby-operator">|</span>
340
- 253: <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">current</span>.<span class="ruby-identifier">abort_on_exception</span> = <span class="ruby-keyword kw">true</span>
341
- 254: <span class="ruby-keyword kw">begin</span>
342
- 255: <span class="ruby-identifier">each</span>{<span class="ruby-operator">|</span><span class="ruby-operator">*</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span>}
343
- 256: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Exception</span>
344
- 257: <span class="ruby-identifier">current</span>.<span class="ruby-identifier">raise</span> <span class="ruby-identifier">$!</span>
345
- 258: <span class="ruby-value">42</span>
346
- 259: <span class="ruby-keyword kw">ensure</span>
347
- 260: <span class="ruby-keyword kw">begin</span>; <span class="ruby-identifier">b</span>.<span class="ruby-identifier">call</span>; <span class="ruby-keyword kw">ensure</span>; <span class="ruby-identifier">b</span> = <span class="ruby-keyword kw">nil</span>; <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">b</span>
348
- 261: <span class="ruby-keyword kw">end</span>
349
- 262: }
350
- 263: <span class="ruby-keyword kw">end</span>
351
- </pre>
352
- </div>
353
- </div>
354
- </div>
355
-
356
- <div id="method-M000023" class="method-detail">
357
- <a name="M000023"></a>
358
-
359
- <div class="method-heading">
360
- <a href="#M000023" class="method-signature">
361
- <span class="method-name">owner?</span><span class="method-args">()</span>
362
- </a>
363
- </div>
364
-
365
- <div class="method-description">
366
- <p><a class="source-toggle" href="#"
367
- onclick="toggleCode('M000023-source');return false;">[Source]</a></p>
368
- <div class="method-source-code" id="M000023-source">
369
- <pre>
370
- <span class="ruby-comment cmt"># File lib/slave.rb, line 184</span>
371
- 184: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">owner?</span>
372
- 185: <span class="ruby-constant">Process</span>.<span class="ruby-identifier">pid</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@owner</span>
373
- 186: <span class="ruby-keyword kw">end</span>
374
- </pre>
375
- </div>
376
- </div>
377
- </div>
378
-
379
- <div id="method-M000024" class="method-detail">
380
- <a name="M000024"></a>
381
-
382
- <div class="method-heading">
383
- <a href="#M000024" class="method-signature">
384
- <span class="method-name">throw</span><span class="method-args">(*ignored)</span>
385
- </a>
386
- </div>
387
-
388
- <div class="method-description">
389
- <p><a class="source-toggle" href="#"
390
- onclick="toggleCode('M000024-source');return false;">[Source]</a></p>
391
- <div class="method-source-code" id="M000024-source">
392
- <pre>
393
- <span class="ruby-comment cmt"># File lib/slave.rb, line 188</span>
394
- 188: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">throw</span> <span class="ruby-operator">*</span><span class="ruby-identifier">ignored</span>
395
- 189: <span class="ruby-identifier">raise</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">owner?</span>
396
- 190: <span class="ruby-ivar">@pair</span>[<span class="ruby-value">-1</span>].<span class="ruby-identifier">close</span>
397
- 191: <span class="ruby-ivar">@pair</span>[<span class="ruby-value">-1</span>] = <span class="ruby-keyword kw">nil</span>
398
- 192: <span class="ruby-ivar">@pid</span> = <span class="ruby-constant">Process</span>.<span class="ruby-identifier">pid</span>
399
- 193: <span class="ruby-ivar">@socket</span> = <span class="ruby-ivar">@pair</span>[<span class="ruby-value">0</span>]
400
- 194: <span class="ruby-ivar">@socket</span>.<span class="ruby-identifier">sync</span> = <span class="ruby-keyword kw">true</span>
401
- 195: <span class="ruby-keyword kw">end</span>
402
- </pre>
403
- </div>
404
- </div>
405
- </div>
406
-
407
-
408
- </div>
409
-
410
-
411
- </div>
412
-
413
-
414
- <div id="validator-badges">
415
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
416
- </div>
417
-
418
- </body>
419
- </html>
@@ -1,292 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
-
6
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
- <head>
8
- <title>Class: Slave::ThreadSafe</title>
9
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
- <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
- <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
12
- <script type="text/javascript">
13
- // <![CDATA[
14
-
15
- function popupCode( url ) {
16
- window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
- }
18
-
19
- function toggleCode( id ) {
20
- if ( document.getElementById )
21
- elem = document.getElementById( id );
22
- else if ( document.all )
23
- elem = eval( "document.all." + id );
24
- else
25
- return false;
26
-
27
- elemStyle = elem.style;
28
-
29
- if ( elemStyle.display != "block" ) {
30
- elemStyle.display = "block"
31
- } else {
32
- elemStyle.display = "none"
33
- }
34
-
35
- return true;
36
- }
37
-
38
- // Make codeblocks hidden by default
39
- document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
-
41
- // ]]>
42
- </script>
43
-
44
- </head>
45
- <body>
46
-
47
-
48
-
49
- <div id="classHeader">
50
- <table class="header-table">
51
- <tr class="top-aligned-row">
52
- <td><strong>Class</strong></td>
53
- <td class="class-name-in-header">Slave::ThreadSafe</td>
54
- </tr>
55
- <tr class="top-aligned-row">
56
- <td><strong>In:</strong></td>
57
- <td>
58
- <a href="../../files/lib/slave_rb.html">
59
- lib/slave.rb
60
- </a>
61
- <br />
62
- </td>
63
- </tr>
64
-
65
- <tr class="top-aligned-row">
66
- <td><strong>Parent:</strong></td>
67
- <td>
68
- Object
69
- </td>
70
- </tr>
71
- </table>
72
- </div>
73
- <!-- banner header -->
74
-
75
- <div id="bodyContent">
76
-
77
-
78
-
79
- <div id="contextContent">
80
- <div id="diagram">
81
- <map id="map" name="map">
82
- <area shape="rect" coords="27,50,99,98" href="../Slave.html" alt="Slave" />
83
- </map>
84
- <img src="../../dot/f_1.jpg" usemap="#map" border="0" alt="dot/f_1.jpg">
85
- </div>
86
-
87
- <div id="description">
88
- <p>
89
- <a href="ThreadSafe.html">ThreadSafe</a> is a delegate wrapper <a
90
- href="ThreadSafe.html#M000021">class</a> used for implementing gross thread
91
- safety around existing objects. when an object is wrapped with this <a
92
- href="ThreadSafe.html#M000021">class</a> as
93
- </p>
94
- <pre>
95
- ts = ThreadSafe.new{ AnyObject.new }
96
- </pre>
97
- <p>
98
- then ts can be used exactly as the normal object would have been, only all
99
- calls are now thread safe. this is the mechanism behind the
100
- &#8216;threadsafe&#8217;/:threadsafe keyword to Slave#initialize
101
- </p>
102
-
103
- </div>
104
-
105
-
106
- </div>
107
-
108
- <div id="method-list">
109
- <h3 class="section-bar">Methods</h3>
110
-
111
- <div class="name-list">
112
- <a href="#M000021">class</a>&nbsp;&nbsp;
113
- <a href="#M000017">ex</a>&nbsp;&nbsp;
114
- <a href="#M000020">inspect</a>&nbsp;&nbsp;
115
- <a href="#M000018">method_missing</a>&nbsp;&nbsp;
116
- <a href="#M000016">new</a>&nbsp;&nbsp;
117
- <a href="#M000019">respond_to?</a>&nbsp;&nbsp;
118
- </div>
119
- </div>
120
-
121
- </div>
122
-
123
-
124
- <!-- if includes -->
125
-
126
- <div id="section">
127
-
128
-
129
-
130
-
131
-
132
-
133
-
134
-
135
- <!-- if method_list -->
136
- <div id="methods">
137
- <h3 class="section-bar">Public Class methods</h3>
138
-
139
- <div id="method-M000016" class="method-detail">
140
- <a name="M000016"></a>
141
-
142
- <div class="method-heading">
143
- <a href="#M000016" class="method-signature">
144
- <span class="method-name">new</span><span class="method-args">(object)</span>
145
- </a>
146
- </div>
147
-
148
- <div class="method-description">
149
- <p><a class="source-toggle" href="#"
150
- onclick="toggleCode('M000016-source');return false;">[Source]</a></p>
151
- <div class="method-source-code" id="M000016-source">
152
- <pre>
153
- <span class="ruby-comment cmt"># File lib/slave.rb, line 130</span>
154
- 130: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span> <span class="ruby-identifier">object</span>
155
- 131: <span class="ruby-ivar">@object</span> = <span class="ruby-identifier">object</span>
156
- 132: <span class="ruby-ivar">@sync</span> = <span class="ruby-constant">Sync</span>.<span class="ruby-identifier">new</span>
157
- 133: <span class="ruby-keyword kw">end</span>
158
- </pre>
159
- </div>
160
- </div>
161
- </div>
162
-
163
- <h3 class="section-bar">Public Instance methods</h3>
164
-
165
- <div id="method-M000021" class="method-detail">
166
- <a name="M000021"></a>
167
-
168
- <div class="method-heading">
169
- <a href="#M000021" class="method-signature">
170
- <span class="method-name">class</span><span class="method-args">()</span>
171
- </a>
172
- </div>
173
-
174
- <div class="method-description">
175
- <p><a class="source-toggle" href="#"
176
- onclick="toggleCode('M000021-source');return false;">[Source]</a></p>
177
- <div class="method-source-code" id="M000021-source">
178
- <pre>
179
- <span class="ruby-comment cmt"># File lib/slave.rb, line 146</span>
180
- 146: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">class</span>
181
- 147: <span class="ruby-identifier">ex</span>{ <span class="ruby-ivar">@object</span>.<span class="ruby-identifier">class</span> }
182
- 148: <span class="ruby-keyword kw">end</span>
183
- </pre>
184
- </div>
185
- </div>
186
- </div>
187
-
188
- <div id="method-M000017" class="method-detail">
189
- <a name="M000017"></a>
190
-
191
- <div class="method-heading">
192
- <a href="#M000017" class="method-signature">
193
- <span class="method-name">ex</span><span class="method-args">() {|| ...}</span>
194
- </a>
195
- </div>
196
-
197
- <div class="method-description">
198
- <p><a class="source-toggle" href="#"
199
- onclick="toggleCode('M000017-source');return false;">[Source]</a></p>
200
- <div class="method-source-code" id="M000017-source">
201
- <pre>
202
- <span class="ruby-comment cmt"># File lib/slave.rb, line 134</span>
203
- 134: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">ex</span>
204
- 135: <span class="ruby-ivar">@sync</span>.<span class="ruby-identifier">synchronize</span>{ <span class="ruby-keyword kw">yield</span> }
205
- 136: <span class="ruby-keyword kw">end</span>
206
- </pre>
207
- </div>
208
- </div>
209
- </div>
210
-
211
- <div id="method-M000020" class="method-detail">
212
- <a name="M000020"></a>
213
-
214
- <div class="method-heading">
215
- <a href="#M000020" class="method-signature">
216
- <span class="method-name">inspect</span><span class="method-args">()</span>
217
- </a>
218
- </div>
219
-
220
- <div class="method-description">
221
- <p><a class="source-toggle" href="#"
222
- onclick="toggleCode('M000020-source');return false;">[Source]</a></p>
223
- <div class="method-source-code" id="M000020-source">
224
- <pre>
225
- <span class="ruby-comment cmt"># File lib/slave.rb, line 143</span>
226
- 143: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">inspect</span>
227
- 144: <span class="ruby-identifier">ex</span>{ <span class="ruby-ivar">@object</span>.<span class="ruby-identifier">inspect</span> }
228
- 145: <span class="ruby-keyword kw">end</span>
229
- </pre>
230
- </div>
231
- </div>
232
- </div>
233
-
234
- <div id="method-M000018" class="method-detail">
235
- <a name="M000018"></a>
236
-
237
- <div class="method-heading">
238
- <a href="#M000018" class="method-signature">
239
- <span class="method-name">method_missing</span><span class="method-args">(m, *a, &amp;b)</span>
240
- </a>
241
- </div>
242
-
243
- <div class="method-description">
244
- <p><a class="source-toggle" href="#"
245
- onclick="toggleCode('M000018-source');return false;">[Source]</a></p>
246
- <div class="method-source-code" id="M000018-source">
247
- <pre>
248
- <span class="ruby-comment cmt"># File lib/slave.rb, line 137</span>
249
- 137: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">method_missing</span> <span class="ruby-identifier">m</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">a</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">b</span>
250
- 138: <span class="ruby-identifier">ex</span>{ <span class="ruby-ivar">@object</span>.<span class="ruby-identifier">send</span> <span class="ruby-identifier">m</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">a</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">b</span> }
251
- 139: <span class="ruby-keyword kw">end</span>
252
- </pre>
253
- </div>
254
- </div>
255
- </div>
256
-
257
- <div id="method-M000019" class="method-detail">
258
- <a name="M000019"></a>
259
-
260
- <div class="method-heading">
261
- <a href="#M000019" class="method-signature">
262
- <span class="method-name">respond_to?</span><span class="method-args">(*a, &amp;b)</span>
263
- </a>
264
- </div>
265
-
266
- <div class="method-description">
267
- <p><a class="source-toggle" href="#"
268
- onclick="toggleCode('M000019-source');return false;">[Source]</a></p>
269
- <div class="method-source-code" id="M000019-source">
270
- <pre>
271
- <span class="ruby-comment cmt"># File lib/slave.rb, line 140</span>
272
- 140: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">respond_to?</span> <span class="ruby-operator">*</span><span class="ruby-identifier">a</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">b</span>
273
- 141: <span class="ruby-identifier">ex</span>{ <span class="ruby-ivar">@object</span>.<span class="ruby-identifier">respond_to?</span> <span class="ruby-operator">*</span><span class="ruby-identifier">a</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">b</span> }
274
- 142: <span class="ruby-keyword kw">end</span>
275
- </pre>
276
- </div>
277
- </div>
278
- </div>
279
-
280
-
281
- </div>
282
-
283
-
284
- </div>
285
-
286
-
287
- <div id="validator-badges">
288
- <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
289
- </div>
290
-
291
- </body>
292
- </html>