@@ -3183,16 +3183,17 @@ Arg* obj_runMethodArg2(PikaObj* self, Arg* methodArg, Arg* arg1, Arg* arg2) {
31833183Arg * __eventListener_runEvent (PikaEventListener * listener ,
31843184 uintptr_t eventId ,
31853185 Arg * eventData ) {
3186+ pika_debug ("event listener: 0x%p" , listener );
31863187 PikaObj * handler = pika_eventListener_getEventHandleObj (listener , eventId );
3187- pika_debug ("event handler: %p" , handler );
3188+ pika_debug ("event handler: 0x %p" , handler );
31883189 if (NULL == handler ) {
31893190 pika_platform_printf (
31903191 "Error: can not find event handler by id: [0x%02" PRIxPTR "]\r\n" ,
31913192 eventId );
31923193 return NULL ;
31933194 }
31943195 Arg * eventCallBack = obj_getArg (handler , "eventCallBack" );
3195- pika_debug ("run event handler : %p" , handler );
3196+ pika_debug ("event data : %p" , eventData );
31963197 Arg * res = pika_runFunction1 (arg_copy (eventCallBack ), arg_copy (eventData ));
31973198 return res ;
31983199}
@@ -3230,6 +3231,7 @@ PIKA_RES _do_pika_eventListener_send(PikaEventListener* self,
32303231 Arg * eventData ,
32313232 int eventSignal ,
32323233 PIKA_BOOL pickupWhenNoVM ) {
3234+ pika_assert (NULL != self );
32333235#if !PIKA_EVENT_ENABLE
32343236 pika_platform_printf ("PIKA_EVENT_ENABLE is not enable" );
32353237 while (1 ) {
@@ -3238,6 +3240,8 @@ PIKA_RES _do_pika_eventListener_send(PikaEventListener* self,
32383240 if (NULL != eventData && !_VM_is_first_lock ()) {
32393241#if PIKA_EVENT_THREAD_ENABLE
32403242 _VM_lock_init ();
3243+ #elif PIKA_COROUTINE_ENABLE
3244+ pika_debug ("sending arg event with corutine mode" );
32413245#else
32423246 pika_platform_printf (
32433247 "Error: can not send arg event data without thread support\r\n" );
@@ -3252,52 +3256,58 @@ PIKA_RES _do_pika_eventListener_send(PikaEventListener* self,
32523256 return PIKA_RES_ERR_RUNTIME_ERROR ;
32533257 }
32543258 }
3259+
3260+ #if !PIKA_COROUTINE_ENABLE // skip wait for corutine
32553261 /* 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 ;
32703271 }
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 ;
32803274 }
3275+ if (pika_GIL_getBareLock () == 0 ) {
3276+ break ;
3277+ }
3278+ pika_platform_thread_yield ();
3279+ }
32813280#endif
32823281
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 ;
32883298 }
3299+ }
32893300
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 ();
32973307 }
3298- __gil_exit :
3299- pika_GIL_EXIT ();
33003308 }
3309+ __gil_exit :
3310+ pika_GIL_EXIT ();
33013311 return (PIKA_RES )0 ;
33023312#endif
33033313}
0 commit comments