static unsigned __stdcall vlc_entry (void *p) { struct vlc_thread *th = (vlc_thread *)p; // sunqueen modify vlc_threadvar_set (thread_key, th); th->killable = true; th->data = th->entry (th->data); vlc_thread_cleanup (th); return 0; }
static void vlc_entry( void *p ) { struct vlc_thread *th = p; vlc_threadvar_set (thread_key, th); th->killable = true; th->data = th->entry (th->data); DosPostEventSem( th->done_event ); vlc_thread_cleanup (th); }
void vlc_testcancel (void) { struct vlc_thread *th = (vlc_thread *)vlc_threadvar_get (thread_key); // sunqueen modify if (th == NULL) return; /* Main thread - cannot be cancelled anyway */ if (th->killable && th->killed) { for (vlc_cleanup_t *p = th->cleaners; p != NULL; p = p->next) p->proc (p->data); th->data = NULL; /* TODO: special value? */ vlc_thread_cleanup (th); _endthreadex(0); } }
void vlc_testcancel (void) { struct vlc_thread *th = vlc_threadvar_get (thread_key); if (th == NULL) return; /* Main thread - cannot be cancelled anyway */ if (th->killable && th->killed) { for (vlc_cleanup_t *p = th->cleaners; p != NULL; p = p->next) p->proc (p->data); th->data = NULL; /* TODO: special value? */ vlc_thread_cleanup (th); #ifndef UNDER_CE _endthreadex(0); #else ExitThread(0); #endif } }
void vlc_testcancel (void) { struct vlc_thread *th = vlc_threadvar_get (thread_key); if (th == NULL) return; /* Main thread - cannot be cancelled anyway */ if (!th->killable) return; #if !VLC_WINSTORE_APP if (likely(!th->killed)) return; #else if (!atomic_load(&th->killed)) return; #endif for (vlc_cleanup_t *p = th->cleaners; p != NULL; p = p->next) p->proc (p->data); th->data = NULL; /* TODO: special value? */ vlc_thread_cleanup (th); _endthreadex(0); }
void vlc_testcancel (void) { struct vlc_thread *th = vlc_threadvar_get (thread_key); if (th == NULL) return; /* Main thread - cannot be cancelled anyway */ /* This check is needed for the case that vlc_cancel() is followed by * vlc_testcancel() without any cancellation point */ if( DosWaitEventSem( th->cancel_event, 0 ) == NO_ERROR ) vlc_cancel_self( NULL ); if (th->killable && th->killed) { for (vlc_cleanup_t *p = th->cleaners; p != NULL; p = p->next) p->proc (p->data); DosPostEventSem( th->done_event ); th->data = NULL; /* TODO: special value? */ vlc_thread_cleanup (th); _endthread(); } }