@@ -3183,16 +3183,17 @@ Arg* obj_runMethodArg2(PikaObj* self, Arg* methodArg, Arg* arg1, Arg* arg2) {
3183
3183
Arg * __eventListener_runEvent (PikaEventListener * listener ,
3184
3184
uintptr_t eventId ,
3185
3185
Arg * eventData ) {
3186
+ pika_debug ("event listener: 0x%p" , listener );
3186
3187
PikaObj * handler = pika_eventListener_getEventHandleObj (listener , eventId );
3187
- pika_debug ("event handler: %p" , handler );
3188
+ pika_debug ("event handler: 0x %p" , handler );
3188
3189
if (NULL == handler ) {
3189
3190
pika_platform_printf (
3190
3191
"Error: can not find event handler by id: [0x%02" PRIxPTR "]\r\n" ,
3191
3192
eventId );
3192
3193
return NULL ;
3193
3194
}
3194
3195
Arg * eventCallBack = obj_getArg (handler , "eventCallBack" );
3195
- pika_debug ("run event handler : %p" , handler );
3196
+ pika_debug ("event data : %p" , eventData );
3196
3197
Arg * res = pika_runFunction1 (arg_copy (eventCallBack ), arg_copy (eventData ));
3197
3198
return res ;
3198
3199
}
@@ -3230,6 +3231,7 @@ PIKA_RES _do_pika_eventListener_send(PikaEventListener* self,
3230
3231
Arg * eventData ,
3231
3232
int eventSignal ,
3232
3233
PIKA_BOOL pickupWhenNoVM ) {
3234
+ pika_assert (NULL != self );
3233
3235
#if !PIKA_EVENT_ENABLE
3234
3236
pika_platform_printf ("PIKA_EVENT_ENABLE is not enable" );
3235
3237
while (1 ) {
@@ -3238,6 +3240,8 @@ PIKA_RES _do_pika_eventListener_send(PikaEventListener* self,
3238
3240
if (NULL != eventData && !_VM_is_first_lock ()) {
3239
3241
#if PIKA_EVENT_THREAD_ENABLE
3240
3242
_VM_lock_init ();
3243
+ #elif PIKA_COROUTINE_ENABLE
3244
+ pika_debug ("sending arg event with corutine mode" );
3241
3245
#else
3242
3246
pika_platform_printf (
3243
3247
"Error: can not send arg event data without thread support\r\n" );
@@ -3252,52 +3256,58 @@ PIKA_RES _do_pika_eventListener_send(PikaEventListener* self,
3252
3256
return PIKA_RES_ERR_RUNTIME_ERROR ;
3253
3257
}
3254
3258
}
3259
+
3260
+ #if !PIKA_COROUTINE_ENABLE // skip wait for corutine
3255
3261
/* using multi thread */
3256
- if (pika_GIL_isInit ()) {
3257
- /* python thread is running */
3258
- /* wait python thread get first lock */
3259
- while (1 ) {
3260
- if (_VM_is_first_lock ()) {
3261
- break ;
3262
- }
3263
- if (g_PikaVMState .vm_cnt == 0 ) {
3264
- break ;
3265
- }
3266
- if (pika_GIL_getBareLock () == 0 ) {
3267
- break ;
3268
- }
3269
- pika_platform_thread_yield ();
3262
+ if (!pika_GIL_isInit ()) {
3263
+ return (PIKA_RES )0 ;
3264
+ };
3265
+
3266
+ /* python thread is running */
3267
+ /* wait python thread get first lock */
3268
+ while (1 ) {
3269
+ if (_VM_is_first_lock ()) {
3270
+ break ;
3270
3271
}
3271
- pika_GIL_ENTER ();
3272
- #if PIKA_EVENT_THREAD_ENABLE
3273
- if (!g_PikaVMState .event_thread ) {
3274
- // avoid _VMEvent_pickupEvent() in _time.c as soon as
3275
- // possible
3276
- g_PikaVMState .event_thread = pika_platform_thread_init (
3277
- "pika_event" , _thread_event , NULL , PIKA_EVENT_THREAD_STACK_SIZE ,
3278
- PIKA_THREAD_PRIO , PIKA_THREAD_TICK );
3279
- pika_debug ("event thread init" );
3272
+ if (g_PikaVMState .vm_cnt == 0 ) {
3273
+ break ;
3280
3274
}
3275
+ if (pika_GIL_getBareLock () == 0 ) {
3276
+ break ;
3277
+ }
3278
+ pika_platform_thread_yield ();
3279
+ }
3281
3280
#endif
3282
3281
3283
- if (NULL != eventData ) {
3284
- if (PIKA_RES_OK !=
3285
- __eventListener_pushEvent (self , eventId , eventData )) {
3286
- goto __gil_exit ;
3287
- }
3282
+ pika_GIL_ENTER ();
3283
+ #if PIKA_EVENT_THREAD_ENABLE
3284
+ if (!g_PikaVMState .event_thread ) {
3285
+ // avoid _VMEvent_pickupEvent() in _time.c as soon as
3286
+ // possible
3287
+ g_PikaVMState .event_thread = pika_platform_thread_init (
3288
+ "pika_event" , _thread_event , NULL , PIKA_EVENT_THREAD_STACK_SIZE ,
3289
+ PIKA_THREAD_PRIO , PIKA_THREAD_TICK );
3290
+ pika_debug ("event thread init" );
3291
+ }
3292
+ #endif
3293
+
3294
+ if (NULL != eventData ) {
3295
+ if (PIKA_RES_OK !=
3296
+ __eventListener_pushEvent (self , eventId , eventData )) {
3297
+ goto __gil_exit ;
3288
3298
}
3299
+ }
3289
3300
3290
- if (pickupWhenNoVM ) {
3291
- int vmCnt = _VMEvent_getVMCnt ();
3292
- if (0 == vmCnt ) {
3293
- /* no vm running, pick up event imediately */
3294
- pika_debug ("vmCnt: %d, pick up imediately" , vmCnt );
3295
- _VMEvent_pickupEvent ();
3296
- }
3301
+ if (pickupWhenNoVM ) {
3302
+ int vmCnt = _VMEvent_getVMCnt ();
3303
+ if (0 == vmCnt ) {
3304
+ /* no vm running, pick up event imediately */
3305
+ pika_debug ("vmCnt: %d, pick up imediately" , vmCnt );
3306
+ _VMEvent_pickupEvent ();
3297
3307
}
3298
- __gil_exit :
3299
- pika_GIL_EXIT ();
3300
3308
}
3309
+ __gil_exit :
3310
+ pika_GIL_EXIT ();
3301
3311
return (PIKA_RES )0 ;
3302
3312
#endif
3303
3313
}
0 commit comments