X-Git-Url: http://git.harvie.cz/?a=blobdiff_plain;ds=sidebyside;f=c%2Fpthread_extra%2Fpthread_extra.h;h=0652e0a568e146bc71844db1477f1c11f57b5a97;hb=883427014d5349442395c1059af5a1abade951ad;hp=bd1baad3b8e1270495b616ccd1b458fe568fd761;hpb=ae4849d11f804c0ea6c7ad4aea8a37702f3dd296;p=mirrors%2FPrograms.git diff --git a/c/pthread_extra/pthread_extra.h b/c/pthread_extra/pthread_extra.h index bd1baad..0652e0a 100644 --- a/c/pthread_extra/pthread_extra.h +++ b/c/pthread_extra/pthread_extra.h @@ -2,26 +2,45 @@ #define __PTHREAD_EXTRA_H__ #include -#include #include #include #include +//#include #define PTHREAD_XTIME_NOBLOCK (&(struct timespec){ .tv_sec = 0, .tv_nsec = 0 }) #define PTHREAD_XTIME_FOREVER NULL -//Pausing +// User data +#define PTHREAD_XTHREADS_MAX 65535 +#define PTHREAD_XNULL ((pthread_t)NULL) + +#ifdef __PTHREAD_EXTRA_INTERNAL +typedef struct pthread_user_data_internal_t { + pthread_t tid; //Thread ID + sig_atomic_t running; //Internaly used by pthread_pause + void *usr; //User pointer +} pthread_user_data_internal_t; + +pthread_user_data_internal_t* pthread_user_data_internal(pthread_t thread); +#endif //__PTHREAD_EXTRA_INTERNAL + +void** pthread_user_data_ptr(pthread_t thread); +void* pthread_user_data_get(pthread_t thread); +void pthread_user_data_set(pthread_t thread, void *usr); + +// Pausing + +//GDB: handle SIG34 nostop noprint #define PTHREAD_XSIG_STOP (SIGRTMIN+0) #define PTHREAD_XSIG_CONT (SIGRTMIN+1) #define PTHREAD_XSIGRTMIN (SIGRTMIN+2) //First unused RT signal -#define pthread_pause(t) (pthread_kill((t), PTHREAD_XSIG_STOP)); -#define pthread_unpause(t) (pthread_kill((t), PTHREAD_XSIG_CONT)); - void pthread_unpause_handler(); void pthread_pause_handler(); void pthread_pause_enable(); +int pthread_pause(pthread_t thread); +int pthread_unpause(pthread_t thread); // Message queues