@@ -79,7 +79,7 @@ typedef struct {
79
79
static size_t current = 0 ;
80
80
static Indices active = {0 };
81
81
static Indices dead = {0 };
82
- static Contexts contexts_ = {0 };
82
+ static Contexts contexts = {0 };
83
83
static Indices asleep = {0 };
84
84
static Polls polls = {0 };
85
85
@@ -166,7 +166,7 @@ void __attribute__((naked)) coroutine_restore_context(void *rsp)
166
166
167
167
void coroutine_switch_context (void * rsp , Sleep_Mode sm , int fd )
168
168
{
169
- contexts_ .items [active .items [current ]].rsp = rsp ;
169
+ contexts .items [active .items [current ]].rsp = rsp ;
170
170
171
171
switch (sm ) {
172
172
case SM_NONE : current += 1 ; break ;
@@ -206,35 +206,35 @@ void coroutine_switch_context(void *rsp, Sleep_Mode sm, int fd)
206
206
207
207
assert (active .count > 0 );
208
208
current %= active .count ;
209
- coroutine_restore_context (contexts_ .items [active .items [current ]].rsp );
209
+ coroutine_restore_context (contexts .items [active .items [current ]].rsp );
210
210
}
211
211
212
212
void coroutine_init (void )
213
213
{
214
- da_append (& contexts_ , (Context ){0 });
214
+ da_append (& contexts , (Context ){0 });
215
215
da_append (& active , 0 );
216
216
}
217
217
218
218
void coroutine_finish (void )
219
219
{
220
220
if (active .items [current ] == 0 ) {
221
- for (size_t i = 1 ; i < contexts_ .count ; ++ i ) {
222
- free (contexts_ .items [i ].stack_base );
221
+ for (size_t i = 1 ; i < contexts .count ; ++ i ) {
222
+ free (contexts .items [i ].stack_base );
223
223
}
224
- free (contexts_ .items );
224
+ free (contexts .items );
225
225
free (active .items );
226
226
free (dead .items );
227
227
free (polls .items );
228
228
free (asleep .items );
229
- memset (& contexts_ , 0 , sizeof (contexts_ ));
229
+ memset (& contexts , 0 , sizeof (contexts ));
230
230
memset (& active , 0 , sizeof (active ));
231
231
memset (& dead , 0 , sizeof (dead ));
232
232
memset (& polls , 0 , sizeof (polls ));
233
233
memset (& asleep , 0 , sizeof (asleep ));
234
234
return ;
235
235
}
236
236
237
- contexts_ .items [active .items [current ]].dead = true;
237
+ contexts .items [active .items [current ]].dead = true;
238
238
da_append (& dead , active .items [current ]);
239
239
da_remove_unordered (& active , current );
240
240
@@ -257,25 +257,25 @@ void coroutine_finish(void)
257
257
258
258
assert (active .count > 0 );
259
259
current %= active .count ;
260
- coroutine_restore_context (contexts_ .items [active .items [current ]].rsp );
260
+ coroutine_restore_context (contexts .items [active .items [current ]].rsp );
261
261
}
262
262
263
263
void coroutine_go (void (* f )(void * ), void * arg )
264
264
{
265
265
size_t id ;
266
266
if (dead .count > 0 ) {
267
267
id = dead .items [-- dead .count ];
268
- assert (contexts_ .items [id ].dead );
269
- contexts_ .items [id ].dead = false;
268
+ assert (contexts .items [id ].dead );
269
+ contexts .items [id ].dead = false;
270
270
} else {
271
271
// TODO: Mark the page at the end of the stack buffer as non-readable, non-writable, non-executable to make stack overflows of coroutines more obvious in the debugger
272
272
// This may require employing mmap(2) and mprotect(2) on Linux.
273
- da_append (& contexts_ , ((Context ){0 }));
274
- id = contexts_ .count - 1 ;
275
- contexts_ .items [id ].stack_base = malloc (STACK_CAPACITY ); // TODO: align the stack to 16 bytes or whatever
273
+ da_append (& contexts , ((Context ){0 }));
274
+ id = contexts .count - 1 ;
275
+ contexts .items [id ].stack_base = malloc (STACK_CAPACITY ); // TODO: align the stack to 16 bytes or whatever
276
276
}
277
277
278
- void * * rsp = (void * * )((char * )contexts_ .items [id ].stack_base + STACK_CAPACITY );
278
+ void * * rsp = (void * * )((char * )contexts .items [id ].stack_base + STACK_CAPACITY );
279
279
// @arch
280
280
* (-- rsp ) = coroutine_finish ;
281
281
* (-- rsp ) = f ;
@@ -286,7 +286,7 @@ void coroutine_go(void (*f)(void*), void *arg)
286
286
* (-- rsp ) = 0 ; // push r13
287
287
* (-- rsp ) = 0 ; // push r14
288
288
* (-- rsp ) = 0 ; // push r15
289
- contexts_ .items [id ].rsp = rsp ;
289
+ contexts .items [id ].rsp = rsp ;
290
290
291
291
da_append (& active , id );
292
292
}
0 commit comments