Skip to content
Newer
Older
100644 553 lines (363 sloc) 14.2 KB
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
1 /*
ab0dec3 @petdance consting
petdance authored Mar 18, 2010
2 Copyright (C) 2001-2010, Parrot Foundation.
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
3
4 =head1 NAME
5
6 src/pmc/scheduler.pmc - The concurrency scheduler
7
8 =head1 DESCRIPTION
9
10 Implements the core concurrency scheduler.
11
d6808fe @allisonrandal [events] Add interface for event handling, add subtype attribute to t…
allisonrandal authored Dec 12, 2007
12 =head2 Vtable Functions
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
13
14 =over 4
15
16 =cut
17
18 */
19
ec73fb3 @allisonrandal [concurrency] Divide scheduler headers into public and private (for c…
allisonrandal authored Dec 6, 2007
20 #include "parrot/scheduler_private.h"
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
21
6bdd5f9 @petdance headerizer now runs on PMC files
petdance authored Mar 28, 2010
22 /* HEADERIZER HFILE: none */
23 /* HEADERIZER BEGIN: static */
24 /* HEADERIZER END: static */
25
6b81760 @Whiteknight [pmc] we don't need need_ext anymore, so BALEETED
Whiteknight authored Aug 23, 2009
26 pmclass Scheduler auto_attrs {
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
27
59661f1 @allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored Mar 11, 2008
28 ATTR INTVAL id; /* The scheduler's ID. */
29 ATTR INTVAL max_tid; /* The highest assigned task ID. */
30 ATTR INTVAL pending; /* A count of pending tasks (cached for fast
31 lookup). */
32 ATTR PMC *task_list; /* The current list of tasks. */
33 ATTR PMC *task_index; /* An index into the current list of tasks,
34 ordered by priority. */
35 ATTR PMC *wait_index; /* An unordered index of inactive tasks. */
36 ATTR PMC *handlers; /* The list of currently active handlers. */
37 ATTR PMC *messages; /* A message queue used for communication
38 between schedulers. */
39 ATTR Parrot_mutex msg_lock; /* Lock to synchronize the message queue. */
40 ATTR Parrot_Interp interp; /* A link to the scheduler's interpreter. */
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
41
42 /*
43
44 =item C<void init()>
45
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
46 Initializes a concurrency scheduler object.
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
47
48 =cut
49
50 */
51
59661f1 @allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored Mar 11, 2008
52 VTABLE void init() {
971e997 @NotFound rename pmc attributes struct from Parrot_<type> to Parrot_<type>_attr…
NotFound authored Sep 8, 2008
53 Parrot_Scheduler_attributes * const core_struct =
5a7584e @NotFound merge auto_attrs branch into trunk
NotFound authored Aug 18, 2009
54 (Parrot_Scheduler_attributes *) PMC_data(SELF);
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
55
1997c49 @cotto [gc] remove/replace DOD references in core PMCs
cotto authored Feb 12, 2009
56 /* Set flags for custom GC mark and destroy. */
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
57 PObj_custom_mark_SET(SELF);
4591dbb @chromatic [HLL] Fixed two compilation-breaking typos accidentally committed in …
chromatic authored Sep 3, 2009
58 PObj_custom_destroy_SET(SELF);
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
59
60 /* Set up the core struct. */
61 core_struct->id = 0;
62 core_struct->max_tid = 0;
26914e1 changed interp in pmc class to INTERP for unification
Jimmy Zhuo authored May 5, 2010
63 core_struct->task_list = Parrot_pmc_new(INTERP, enum_class_Hash);
64 core_struct->task_index = Parrot_pmc_new(INTERP, enum_class_ResizableIntegerArray);
65 core_struct->wait_index = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
66 core_struct->handlers = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
083213a @Whiteknight start rename of pmc_new to Parrot_pmc_new
Whiteknight authored Feb 16, 2010
67 core_struct->messages = Parrot_pmc_new(interp, enum_class_ResizablePMCArray);
2f43c23 @allisonrandal [concurrency] Initialize interp struct member in Scheduler. Add a way to
allisonrandal authored Dec 2, 2007
68 core_struct->interp = INTERP;
4d9c960 @allisonrandal [concurrency] Next stage of concurrency implementation, message passi…
allisonrandal authored Jan 5, 2008
69 MUTEX_INIT(core_struct->msg_lock);
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
70 }
71
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
72
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
73 /*
74
96858ee @chromatic [PMC] Added init_pmc() to Scheduler PMC, with tests.
chromatic authored Dec 3, 2007
75 =item C<void init_pmc(PMC *data)>
76
77 Initializes a new Scheduler with a C<Hash> PMC with any or all of the keys:
78
79 =over 4
80
81 =item C<id>
82
83 An C<Integer> representing the unique identifier for this scheduler.
84
85 =back
86
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
87 =cut
88
96858ee @chromatic [PMC] Added init_pmc() to Scheduler PMC, with tests.
chromatic authored Dec 3, 2007
89 */
90
59661f1 @allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored Mar 11, 2008
91 VTABLE void init_pmc(PMC *data) {
96858ee @chromatic [PMC] Added init_pmc() to Scheduler PMC, with tests.
chromatic authored Dec 3, 2007
92 PMC *elem;
971e997 @NotFound rename pmc attributes struct from Parrot_<type> to Parrot_<type>_attr…
NotFound authored Sep 8, 2008
93 Parrot_Scheduler_attributes *core_struct;
96858ee @chromatic [PMC] Added init_pmc() to Scheduler PMC, with tests.
chromatic authored Dec 3, 2007
94
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
95 if (!VTABLE_isa(INTERP, data, CONST_STRING(INTERP, "Hash")))
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
96 Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
4d9c960 @allisonrandal [concurrency] Next stage of concurrency implementation, message passi…
allisonrandal authored Jan 5, 2008
97 "Scheduler initializer must be a Hash");
96858ee @chromatic [PMC] Added init_pmc() to Scheduler PMC, with tests.
chromatic authored Dec 3, 2007
98
4d9c960 @allisonrandal [concurrency] Next stage of concurrency implementation, message passi…
allisonrandal authored Jan 5, 2008
99 SELF.init();
96858ee @chromatic [PMC] Added init_pmc() to Scheduler PMC, with tests.
chromatic authored Dec 3, 2007
100
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
101 core_struct = PARROT_SCHEDULER(SELF);
102 elem = VTABLE_get_pmc_keyed_str(INTERP, data, CONST_STRING(INTERP, "id"));
96858ee @chromatic [PMC] Added init_pmc() to Scheduler PMC, with tests.
chromatic authored Dec 3, 2007
103
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
104 if (!PMC_IS_NULL(elem))
105 core_struct->id = VTABLE_get_integer(INTERP, elem);
96858ee @chromatic [PMC] Added init_pmc() to Scheduler PMC, with tests.
chromatic authored Dec 3, 2007
106 }
107
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
108
96858ee @chromatic [PMC] Added init_pmc() to Scheduler PMC, with tests.
chromatic authored Dec 3, 2007
109 /*
110
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
111 =item C<void push_pmc(PMC *value)>
112
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
113 Inserts a task into the task list, giving it a task ID one higher than the
98ca8df @allisonrandal [concurrency] Further work on the new concurrency scheduler. (With ap…
allisonrandal authored Dec 31, 2007
114 current maximum, and a birthtime of the current time.
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
115
116 =cut
117
118 */
119
e922116 @allisonrandal [concurrency] Initial implementation of concurrency scheduler runloop.
allisonrandal authored Dec 4, 2007
120 void push_pmc(PMC *task) {
971e997 @NotFound rename pmc attributes struct from Parrot_<type> to Parrot_<type>_attr…
NotFound authored Sep 8, 2008
121 Parrot_Scheduler_attributes * const core_struct = PARROT_SCHEDULER(SELF);
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
122 STRING *task_id_str;
123 INTVAL new_tid;
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
124
98ca8df @allisonrandal [concurrency] Further work on the new concurrency scheduler. (With ap…
allisonrandal authored Dec 31, 2007
125 task = VTABLE_share_ro(INTERP, task);
126 VTABLE_set_number_native(INTERP, task, Parrot_floatval_time());
d0fb13e @allisonrandal [concurrency] Tasks are marked as shared before being inserted into t…
allisonrandal authored Dec 6, 2007
127
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
128 new_tid = ++(core_struct->max_tid);
98ca8df @allisonrandal [concurrency] Further work on the new concurrency scheduler. (With ap…
allisonrandal authored Dec 31, 2007
129 VTABLE_set_integer_native(INTERP, task, new_tid);
b6bc0c3 @allisonrandal [pdd28str] Merging the pdd27mmd branch into trunk for r36123 to r36318.
allisonrandal authored Feb 3, 2009
130 task_id_str = Parrot_str_from_int(INTERP, new_tid);
245b0a8 @allisonrandal [concurrency] Change an array of task IDs to an integer array rather …
allisonrandal authored Dec 6, 2007
131
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
132 VTABLE_set_pmc_keyed_str(INTERP, core_struct->task_list,
133 task_id_str, task);
98ca8df @allisonrandal [concurrency] Further work on the new concurrency scheduler. (With ap…
allisonrandal authored Dec 31, 2007
134
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
135 if (task->vtable->base_type == enum_class_Timer)
98ca8df @allisonrandal [concurrency] Further work on the new concurrency scheduler. (With ap…
allisonrandal authored Dec 31, 2007
136 VTABLE_push_integer(INTERP, core_struct->wait_index, new_tid);
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
137 else
98ca8df @allisonrandal [concurrency] Further work on the new concurrency scheduler. (With ap…
allisonrandal authored Dec 31, 2007
138 VTABLE_push_integer(INTERP, core_struct->task_index, new_tid);
139
140 SCHEDULER_cache_valid_CLEAR(SELF);
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
141
559c616 @Whiteknight remove most uses of enum_class_Exception from the source. Where teste…
Whiteknight authored Jan 19, 2011
142 if (!VTABLE_does(interp, task, CONST_STRING(interp, "Exception")))
26914e1 changed interp in pmc class to INTERP for unification
Jimmy Zhuo authored May 5, 2010
143 Parrot_cx_runloop_wake(core_struct->INTERP, SELF);
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
144 }
145
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
146
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
147 /*
148
149 =item C<PMC *pop_pmc()>
150
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
151 Retrieves the next task from the task list. If the task index is invalid,
152 recalculates it before retrieving the next task.
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
153
154 =cut
155
156 */
157
59661f1 @allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored Mar 11, 2008
158 VTABLE PMC *pop_pmc() {
82f841a @petdance consting, and hoisted a CONST_STRING
petdance authored Feb 28, 2011
159 const Parrot_Scheduler_attributes * const core_struct = PARROT_SCHEDULER(SELF);
98ca8df @allisonrandal [concurrency] Further work on the new concurrency scheduler. (With ap…
allisonrandal authored Dec 31, 2007
160 PMC *task = PMCNULL;
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
161
98ca8df @allisonrandal [concurrency] Further work on the new concurrency scheduler. (With ap…
allisonrandal authored Dec 31, 2007
162 /* Pull the next valid task off the task list, skipping expired and
163 * deleted tasks. */
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
164 while (PMC_IS_NULL(task)
165 && VTABLE_elements(INTERP, core_struct->task_index) > 0) {
ab0dec3 @petdance consting
petdance authored Mar 18, 2010
166 const INTVAL tid = VTABLE_shift_integer(INTERP, core_struct->task_index);
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
167
98ca8df @allisonrandal [concurrency] Further work on the new concurrency scheduler. (With ap…
allisonrandal authored Dec 31, 2007
168 if (tid > 0)
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
169 task = VTABLE_get_pmc_keyed_int(INTERP,
170 core_struct->task_list, tid);
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
171 }
172
98ca8df @allisonrandal [concurrency] Further work on the new concurrency scheduler. (With ap…
allisonrandal authored Dec 31, 2007
173 return task;
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
174 }
175
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
176
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
177 /*
178
2f43c23 @allisonrandal [concurrency] Initialize interp struct member in Scheduler. Add a way to
allisonrandal authored Dec 2, 2007
179 =item C<INTVAL get_integer()>
180
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
181 Retrieves the number of pending tasks in the scheduler's task list.
2f43c23 @allisonrandal [concurrency] Initialize interp struct member in Scheduler. Add a way to
allisonrandal authored Dec 2, 2007
182
183 =cut
184
185 */
186
59661f1 @allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored Mar 11, 2008
187 VTABLE INTVAL get_integer() {
971e997 @NotFound rename pmc attributes struct from Parrot_<type> to Parrot_<type>_attr…
NotFound authored Sep 8, 2008
188 Parrot_Scheduler_attributes * core_struct = PARROT_SCHEDULER(SELF);
2f43c23 @allisonrandal [concurrency] Initialize interp struct member in Scheduler. Add a way to
allisonrandal authored Dec 2, 2007
189 return VTABLE_elements(INTERP, core_struct->task_index);
190 }
191
d6808fe @allisonrandal [events] Add interface for event handling, add subtype attribute to t…
allisonrandal authored Dec 12, 2007
192
2f43c23 @allisonrandal [concurrency] Initialize interp struct member in Scheduler. Add a way to
allisonrandal authored Dec 2, 2007
193 /*
194
195 =item C<void delete_keyed_int(INTVAL key)>
196
197 Removes the task with the given task ID from the task list.
198
199 =cut
200
201 */
202
59661f1 @allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored Mar 11, 2008
203 VTABLE void delete_keyed_int(INTVAL key) {
82f841a @petdance consting, and hoisted a CONST_STRING
petdance authored Feb 28, 2011
204 const Parrot_Scheduler_attributes * const core_struct = PARROT_SCHEDULER(SELF);
ab0dec3 @petdance consting
petdance authored Mar 18, 2010
205 STRING * const task_id_str = Parrot_str_from_int(INTERP, key);
206
98ca8df @allisonrandal [concurrency] Further work on the new concurrency scheduler. (With ap…
allisonrandal authored Dec 31, 2007
207 VTABLE_delete_keyed_str(INTERP, core_struct->task_list, task_id_str);
2f43c23 @allisonrandal [concurrency] Initialize interp struct member in Scheduler. Add a way to
allisonrandal authored Dec 2, 2007
208 SCHEDULER_cache_valid_CLEAR(SELF);
209 }
210
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
211
2f43c23 @allisonrandal [concurrency] Initialize interp struct member in Scheduler. Add a way to
allisonrandal authored Dec 2, 2007
212 /*
213
e922116 @allisonrandal [concurrency] Initial implementation of concurrency scheduler runloop.
allisonrandal authored Dec 4, 2007
214 =item C<PMC *share_ro()>
215
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
216 Sets this PMC as shared.
e922116 @allisonrandal [concurrency] Initial implementation of concurrency scheduler runloop.
allisonrandal authored Dec 4, 2007
217
218 =cut
219
220 */
221
59661f1 @allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored Mar 11, 2008
222 VTABLE PMC *share_ro() {
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
223 PMC *shared_self;
971e997 @NotFound rename pmc attributes struct from Parrot_<type> to Parrot_<type>_attr…
NotFound authored Sep 8, 2008
224 Parrot_Scheduler_attributes *sched;
e922116 @allisonrandal [concurrency] Initial implementation of concurrency scheduler runloop.
allisonrandal authored Dec 4, 2007
225
226 if (PObj_is_PMC_shared_TEST(SELF))
227 return SELF;
228
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
229 shared_self = pt_shared_fixup(INTERP, SELF);
230 sched = PARROT_SCHEDULER(shared_self);
e922116 @allisonrandal [concurrency] Initial implementation of concurrency scheduler runloop.
allisonrandal authored Dec 4, 2007
231
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
232 sched->task_list = pt_shared_fixup(INTERP, sched->task_list);
233 sched->task_index = pt_shared_fixup(INTERP, sched->task_index);
234 sched->wait_index = pt_shared_fixup(INTERP, sched->wait_index);
235 sched->handlers = pt_shared_fixup(INTERP, sched->handlers);
236 sched->messages = pt_shared_fixup(INTERP, sched->messages);
e922116 @allisonrandal [concurrency] Initial implementation of concurrency scheduler runloop.
allisonrandal authored Dec 4, 2007
237
238 return shared_self;
239 }
240
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
241
e922116 @allisonrandal [concurrency] Initial implementation of concurrency scheduler runloop.
allisonrandal authored Dec 4, 2007
242 /*
243
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
244 =item C<void destroy()>
245
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
246 Frees the scheduler's underlying struct.
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
247
248 =cut
249
250 */
59661f1 @allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored Mar 11, 2008
251 VTABLE void destroy() {
971e997 @NotFound rename pmc attributes struct from Parrot_<type> to Parrot_<type>_attr…
NotFound authored Sep 8, 2008
252 Parrot_Scheduler_attributes * const core_struct = PARROT_SCHEDULER(SELF);
40787d4 @Whiteknight [gc] Gix order-of-destruction bug discovered by Chandon++. The check …
Whiteknight authored Jun 12, 2010
253 core_struct->interp->scheduler = NULL;
540d4c3 @bacek Merge context_pmc3 branch into trunk.
bacek authored Sep 3, 2009
254 /* TT #946: this line is causing an order-of-destruction error
da3d960 @cotto [cage] fix most (all?) misuses of "it's"
cotto authored May 13, 2010
255 because the scheduler is being freed before its tasks.
540d4c3 @bacek Merge context_pmc3 branch into trunk.
bacek authored Sep 3, 2009
256 Commenting this out till we get a real fix (although it's a hack) */
257 /* MUTEX_DESTROY(core_struct->msg_lock); */
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
258 }
259
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
260
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
261 /*
262
263 =item C<void mark()>
264
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
265 Marks any referenced strings and PMCs as live.
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
266
267 =cut
268
269 */
59661f1 @allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored Mar 11, 2008
270 VTABLE void mark() {
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
271 if (PARROT_SCHEDULER(SELF)) {
971e997 @NotFound rename pmc attributes struct from Parrot_<type> to Parrot_<type>_attr…
NotFound authored Sep 8, 2008
272 Parrot_Scheduler_attributes * const core_struct = PARROT_SCHEDULER(SELF);
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
273
26914e1 changed interp in pmc class to INTERP for unification
Jimmy Zhuo authored May 5, 2010
274 Parrot_gc_mark_PMC_alive(INTERP, core_struct->task_list);
275 Parrot_gc_mark_PMC_alive(INTERP, core_struct->task_index);
276 Parrot_gc_mark_PMC_alive(INTERP, core_struct->wait_index);
277 Parrot_gc_mark_PMC_alive(INTERP, core_struct->handlers);
278 Parrot_gc_mark_PMC_alive(INTERP, core_struct->messages);
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
279 }
280 }
281
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
282
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
283 /*
284
b101f2c @darbelo Merge pmc_freeze_with_pmcs into trunk.
darbelo authored Feb 2, 2010
285 =item C<void visit(PMC *info)>
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
286
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
287 Visits the contents of the scheduler (used by freeze/thaw).
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
288
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
289 C<*info> is the visit info (see F<include/parrot/pmc_freeze.h>).
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
290
291 =cut
292
293 */
294
b101f2c @darbelo Merge pmc_freeze_with_pmcs into trunk.
darbelo authored Feb 2, 2010
295 VTABLE void visit(PMC *info) {
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
296 /* 1) visit task list */
4c43475 @plobsing merge branch pmc_freeze_cleanup
plobsing authored Jan 13, 2010
297 VISIT_PMC_ATTR(INTERP, info, SELF, Scheduler, task_list);
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
298
299 /* 2) visit the handlers */
4c43475 @plobsing merge branch pmc_freeze_cleanup
plobsing authored Jan 13, 2010
300 VISIT_PMC_ATTR(INTERP, info, SELF, Scheduler, handlers);
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
301 }
302
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
303
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
304 /*
305
b101f2c @darbelo Merge pmc_freeze_with_pmcs into trunk.
darbelo authored Feb 2, 2010
306 =item C<void freeze(PMC *info)>
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
307
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
308 Archives the scheduler.
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
309
310 =cut
311
312 */
313
b101f2c @darbelo Merge pmc_freeze_with_pmcs into trunk.
darbelo authored Feb 2, 2010
314 VTABLE void freeze(PMC *info) {
971e997 @NotFound rename pmc attributes struct from Parrot_<type> to Parrot_<type>_attr…
NotFound authored Sep 8, 2008
315 Parrot_Scheduler_attributes * const core_struct = PARROT_SCHEDULER(SELF);
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
316
317 /* 1) freeze scheduler id */
4c43475 @plobsing merge branch pmc_freeze_cleanup
plobsing authored Jan 13, 2010
318 VTABLE_push_integer(INTERP, info, core_struct->id);
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
319
320 /* 2) freeze maximum task id */
4c43475 @plobsing merge branch pmc_freeze_cleanup
plobsing authored Jan 13, 2010
321 VTABLE_push_integer(INTERP, info, core_struct->max_tid);
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
322 }
323
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
324
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
325 /*
326
b101f2c @darbelo Merge pmc_freeze_with_pmcs into trunk.
darbelo authored Feb 2, 2010
327 =item C<void thaw(PMC *info)>
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
328
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
329 Unarchives the scheduler.
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
330
331 =cut
332
333 */
334
b101f2c @darbelo Merge pmc_freeze_with_pmcs into trunk.
darbelo authored Feb 2, 2010
335 VTABLE void thaw(PMC *info) {
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
336 /* 1. thaw scheduler id */
4c43475 @plobsing merge branch pmc_freeze_cleanup
plobsing authored Jan 13, 2010
337 const INTVAL id = VTABLE_shift_integer(INTERP, info);
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
338
339 /* 2. thaw maximum task id */
4c43475 @plobsing merge branch pmc_freeze_cleanup
plobsing authored Jan 13, 2010
340 const INTVAL max_tid = VTABLE_shift_integer(INTERP, info);
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
341
342 /* Allocate the scheduler's core data struct and set custom flags. */
343 SELF.init();
344
345 /* Set the scheduler's id to the frozen id */
346 PARROT_SCHEDULER(SELF)->id = id;
347
348 /* Set the scheduler's maximum task id to the frozen tid */
349 PARROT_SCHEDULER(SELF)->max_tid = max_tid;
350 }
351
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
352
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
353 /*
354
b101f2c @darbelo Merge pmc_freeze_with_pmcs into trunk.
darbelo authored Feb 2, 2010
355 =item C<void thawfinish(PMC *info)>
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
356
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
357 Finishes thawing the scheduler.
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
358
359 =cut
360
361 */
362
b101f2c @darbelo Merge pmc_freeze_with_pmcs into trunk.
darbelo authored Feb 2, 2010
363 VTABLE void thawfinish(PMC *info) {
4d9c960 @allisonrandal [concurrency] Next stage of concurrency implementation, message passi…
allisonrandal authored Jan 5, 2008
364 Parrot_cx_refresh_task_list(INTERP, SELF);
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
365 }
366
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
367
d6808fe @allisonrandal [events] Add interface for event handling, add subtype attribute to t…
allisonrandal authored Dec 12, 2007
368 /*
369
370 =back
371
372 =head2 Methods
373
374 =over 4
375
376 =cut
377
378 */
379
380 /*
381
59661f1 @allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored Mar 11, 2008
382 =item C<METHOD add_handler(PMC *handler)>
d6808fe @allisonrandal [events] Add interface for event handling, add subtype attribute to t…
allisonrandal authored Dec 12, 2007
383
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
384 Adds a handler to the scheduler.
d6808fe @allisonrandal [events] Add interface for event handling, add subtype attribute to t…
allisonrandal authored Dec 12, 2007
385
386 =cut
387
388 */
389
59661f1 @allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored Mar 11, 2008
390 METHOD add_handler(PMC *handler) {
82f841a @petdance consting, and hoisted a CONST_STRING
petdance authored Feb 28, 2011
391 const Parrot_Scheduler_attributes * const core_struct = PARROT_SCHEDULER(SELF);
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
392 VTABLE_unshift_pmc(INTERP, core_struct->handlers, handler);
393 }
394
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
395
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
396 /*
397
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
398 =item C<METHOD delete_handler(STRING *type :optional, INTVAL have_type :opt_flag)>
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
399
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
400 Deletes a handler from the scheduler.
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
401
402 =cut
403
404 */
405
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
406 METHOD delete_handler(STRING *type :optional, INTVAL have_type :opt_flag) {
407 PMC *handlers;
408 INTVAL elements, index;
ab0dec3 @petdance consting
petdance authored Mar 18, 2010
409 STRING * const except_str = CONST_STRING(INTERP, "exception");
410 STRING * const event_str = CONST_STRING(INTERP, "event");
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
411
412 GET_ATTR_handlers(INTERP, SELF, handlers);
413 elements = VTABLE_elements(INTERP, handlers);
414
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
415 if (!have_type)
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
416 VTABLE_shift_pmc(INTERP, handlers);
417
418 /* Loop from newest handler to oldest handler. */
419 for (index = 0; index < elements; ++index) {
ab0dec3 @petdance consting
petdance authored Mar 18, 2010
420 const PMC * const handler = VTABLE_get_pmc_keyed_int(INTERP, handlers, index);
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
421 if (!PMC_IS_NULL(handler)) {
9116125 @nwellnhof [str] Switch to STRING_equal macro
nwellnhof authored Oct 2, 2010
422 if (STRING_equal(INTERP, type, except_str)
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
423 && handler->vtable->base_type == enum_class_ExceptionHandler) {
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
424 VTABLE_set_pmc_keyed_int(INTERP, handlers, index, PMCNULL);
425 RETURN(void);
426 }
9116125 @nwellnhof [str] Switch to STRING_equal macro
nwellnhof authored Oct 2, 2010
427 else if (STRING_equal(INTERP, type, event_str)
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
428 && handler->vtable->base_type == enum_class_EventHandler) {
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
429 VTABLE_set_pmc_keyed_int(INTERP, handlers, index, PMCNULL);
430 RETURN(void);
431 }
432 }
433 }
434
26914e1 changed interp in pmc class to INTERP for unification
Jimmy Zhuo authored May 5, 2010
435 Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_INVALID_OPERATION,
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
436 "No handler to delete.");
d6808fe @allisonrandal [events] Add interface for event handling, add subtype attribute to t…
allisonrandal authored Dec 12, 2007
437 }
98ca8df @allisonrandal [concurrency] Further work on the new concurrency scheduler. (With ap…
allisonrandal authored Dec 31, 2007
438
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
439
d6808fe @allisonrandal [events] Add interface for event handling, add subtype attribute to t…
allisonrandal authored Dec 12, 2007
440 /*
441
59661f1 @allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored Mar 11, 2008
442 =item C<METHOD find_handler(PMC *task)>
d6808fe @allisonrandal [events] Add interface for event handling, add subtype attribute to t…
allisonrandal authored Dec 12, 2007
443
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
444 Searchs for a handler for the given task. If no handler is found, returns
d6808fe @allisonrandal [events] Add interface for event handling, add subtype attribute to t…
allisonrandal authored Dec 12, 2007
445 PMCNULL.
446
447 =cut
448
449 */
450
59661f1 @allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored Mar 11, 2008
451 METHOD find_handler(PMC *task) {
26914e1 changed interp in pmc class to INTERP for unification
Jimmy Zhuo authored May 5, 2010
452 STRING * const handled_str = CONST_STRING(INTERP, "handled");
453 STRING * const iter_str = CONST_STRING(INTERP, "handler_iter");
82f841a @petdance consting, and hoisted a CONST_STRING
petdance authored Feb 28, 2011
454 STRING * const exception_str = CONST_STRING(INTERP, "Exception");
0006ce7 @chromatic [src] Fixed all CONST_STRING macros so that they don't break across l…
chromatic authored Dec 19, 2008
455 PMC *iter;
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
456
457 /* Exceptions store the handler iterator for rethrow, other kinds of
458 * tasks don't (though they could). */
82f841a @petdance consting, and hoisted a CONST_STRING
petdance authored Feb 28, 2011
459 if (VTABLE_does(interp, task, exception_str)
26914e1 changed interp in pmc class to INTERP for unification
Jimmy Zhuo authored May 5, 2010
460 && VTABLE_get_integer_keyed_str(INTERP, task, handled_str) == -1) {
461 iter = VTABLE_get_attr_str(INTERP, task, iter_str);
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
462 }
463 else {
464 PMC *handlers;
26914e1 changed interp in pmc class to INTERP for unification
Jimmy Zhuo authored May 5, 2010
465 GET_ATTR_handlers(INTERP, SELF, handlers);
466 iter = VTABLE_get_iter(INTERP, handlers);
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
467
468 if (task->vtable->base_type == enum_class_Exception)
26914e1 changed interp in pmc class to INTERP for unification
Jimmy Zhuo authored May 5, 2010
469 VTABLE_set_attr_str(INTERP, task, iter_str, iter);
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
470 }
471
472 /* Loop from newest handler to oldest handler. */
26914e1 changed interp in pmc class to INTERP for unification
Jimmy Zhuo authored May 5, 2010
473 while (VTABLE_get_bool(INTERP, iter)) {
ab0dec3 @petdance consting
petdance authored Mar 18, 2010
474 PMC * const handler = VTABLE_shift_pmc(INTERP, iter);
d6808fe @allisonrandal [events] Add interface for event handling, add subtype attribute to t…
allisonrandal authored Dec 12, 2007
475
82f841a @petdance consting, and hoisted a CONST_STRING
petdance authored Feb 28, 2011
476 INTVAL valid_handler;
d6808fe @allisonrandal [events] Add interface for event handling, add subtype attribute to t…
allisonrandal authored Dec 12, 2007
477 if (!PMC_IS_NULL(handler)) {
ab0dec3 @petdance consting
petdance authored Mar 18, 2010
478 (const INTVAL valid_handler) = PCCINVOKE(INTERP, handler, "can_handle", PMC *task);
d6808fe @allisonrandal [events] Add interface for event handling, add subtype attribute to t…
allisonrandal authored Dec 12, 2007
479 if (valid_handler) {
82f841a @petdance consting, and hoisted a CONST_STRING
petdance authored Feb 28, 2011
480 if (!VTABLE_does(interp, task, exception_str))
26914e1 changed interp in pmc class to INTERP for unification
Jimmy Zhuo authored May 5, 2010
481 VTABLE_set_integer_native(INTERP, handler, 1);
59661f1 @allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored Mar 11, 2008
482 RETURN(PMC *handler);
d6808fe @allisonrandal [events] Add interface for event handling, add subtype attribute to t…
allisonrandal authored Dec 12, 2007
483 }
484 }
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
485
d6808fe @allisonrandal [events] Add interface for event handling, add subtype attribute to t…
allisonrandal authored Dec 12, 2007
486 }
487
59661f1 @allisonrandal [pdd17pmc] Merging the pdd17pmc branch into trunk (r24435 to r26307).
allisonrandal authored Mar 11, 2008
488 RETURN(PMC *PMCNULL);
98ca8df @allisonrandal [concurrency] Further work on the new concurrency scheduler. (With ap…
allisonrandal authored Dec 31, 2007
489 }
490
d6808fe @allisonrandal [events] Add interface for event handling, add subtype attribute to t…
allisonrandal authored Dec 12, 2007
491
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
492 /*
493
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
494 =item C<METHOD count_handlers(STRING *type :optional, INTVAL have_type :opt_flag)>
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
495
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
496 Returns the number of handlers currently held by the scheduler. If a type
497 argument is passed, only counts handlers of that type (C<event>, C<exception>).
498 If no type argument is passed, counts all handlers.
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
499
500 =cut
501
502 */
503
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
504 METHOD count_handlers(STRING *type :optional, INTVAL have_type :opt_flag) {
505 /* avoid uninitialized value warning */
506 PMC *handlers = NULL;
9f26f43 @NotFound fix count_eh opcode and add test for it, TT #212 rg++
NotFound authored Jan 25, 2009
507 INTVAL elements;
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
508 INTVAL count = 0;
509 INTVAL index;
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
510
511 GET_ATTR_handlers(INTERP, SELF, handlers);
9f26f43 @NotFound fix count_eh opcode and add test for it, TT #212 rg++
NotFound authored Jan 25, 2009
512 elements = VTABLE_elements(INTERP, handlers);
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
513
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
514 if (!have_type)
515 RETURN(INTVAL elements);
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
516
517 for (index = 0; index < elements; ++index) {
ab0dec3 @petdance consting
petdance authored Mar 18, 2010
518 const PMC * const handler = VTABLE_get_pmc_keyed_int(INTERP, handlers, index);
82f841a @petdance consting, and hoisted a CONST_STRING
petdance authored Feb 28, 2011
519 const STRING * const exception = CONST_STRING(INTERP, "exception");
520 const STRING * const event = CONST_STRING(INTERP, "event");
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
521
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
522 if (!PMC_IS_NULL(handler)) {
9116125 @nwellnhof [str] Switch to STRING_equal macro
nwellnhof authored Oct 2, 2010
523 if ((STRING_equal(INTERP, type, exception)
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
524 && handler->vtable->base_type == enum_class_ExceptionHandler)
9116125 @nwellnhof [str] Switch to STRING_equal macro
nwellnhof authored Oct 2, 2010
525 || (STRING_equal(INTERP, type, event)
be7602b @chromatic [PMC] Fixed compiler warnings (use of uninitialized variables) and ti…
chromatic authored Aug 9, 2008
526 && handler->vtable->base_type == enum_class_EventHandler))
40e294a manual optimization for old compiler
Jimmy Zhuo authored Apr 30, 2010
527 ++count;
2255840 @allisonrandal [pdd17pmc] Merging the pdd25cx branch into trunk for r26555 to r29949.
allisonrandal authored Aug 2, 2008
528 }
529 }
530
531 RETURN(INTVAL count);
532 }
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
533 }
534
535 /*
536
537 =back
538
539 =head1 SEE ALSO
540
4d9c960 @allisonrandal [concurrency] Next stage of concurrency implementation, message passi…
allisonrandal authored Jan 5, 2008
541 F<docs/pdds/pdd25_concurrency.pod>.
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
542
543 =cut
544
545 */
546
547 /*
548 * Local variables:
549 * c-file-style: "parrot"
550 * End:
1d7dded @plobsing update C file vim modelines
plobsing authored Nov 29, 2010
551 * vim: expandtab shiftwidth=4 cinoptions='\:2=2' :
1d259c6 @allisonrandal [concurrency] Initial implementations of the Scheduler and Task PMCs.
allisonrandal authored Nov 25, 2007
552 */
Something went wrong with that request. Please try again.