X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_threads.h;h=d3f021bb40b1a1bda32fa79aabc3066139f161f2;hb=refs%2Fheads%2Fmaster;hp=1ffbae6798ab0b1278e9e52d89d0c56a049e0212;hpb=6d5336200143e6d1ad70ef653c72265d25f67640;p=vlc diff --git a/include/vlc_threads.h b/include/vlc_threads.h index 1ffbae6798..d3f021bb40 100644 --- a/include/vlc_threads.h +++ b/include/vlc_threads.h @@ -155,8 +155,12 @@ typedef struct vlc_timer *vlc_timer_t; typedef pthread_t vlc_thread_t; typedef pthread_mutex_t vlc_mutex_t; #define VLC_STATIC_MUTEX PTHREAD_MUTEX_INITIALIZER -typedef pthread_cond_t vlc_cond_t; -#define VLC_STATIC_COND PTHREAD_COND_INITIALIZER +typedef struct +{ + pthread_cond_t cond; + unsigned clock; +} vlc_cond_t; +#define VLC_STATIC_COND { PTHREAD_COND_INITIALIZER, 0 } typedef semaphore_t vlc_sem_t; typedef pthread_rwlock_t vlc_rwlock_t; #define VLC_STATIC_RWLOCK PTHREAD_RWLOCK_INITIALIZER @@ -382,12 +386,29 @@ struct vlc_cleanup_t vlc_cleanup_data.proc (vlc_cleanup_data.data); \ } while (0) -#endif /* !LIBVLC_USE_PTHREAD_CLEANUO */ +#endif /* !LIBVLC_USE_PTHREAD_CLEANUP */ #ifndef LIBVLC_USE_PTHREAD_CANCEL /* poll() with cancellation */ # ifdef __OS2__ -int vlc_poll (struct pollfd *fds, unsigned nfds, int timeout); +static inline int vlc_poll (struct pollfd *fds, unsigned nfds, int timeout) +{ + static int (*vlc_poll_os2)(struct pollfd *, unsigned, int) = NULL; + + if (!vlc_poll_os2) + { + HMODULE hmod; + CHAR szFailed[CCHMAXPATH]; + + if (DosLoadModule(szFailed, sizeof(szFailed), "vlccore", &hmod)) + return -1; + + if (DosQueryProcAddr(hmod, 0, "_vlc_poll_os2", (PFN *)&vlc_poll_os2)) + return -1; + } + + return (*vlc_poll_os2)(fds, nfds, timeout); +} # else static inline int vlc_poll (struct pollfd *fds, unsigned nfds, int timeout) {