X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fsysdep_decls.h;h=7d02ba74b52ee7532df63bd7c0efbe2f69829e26;hb=579aa049401703a63399da008434a10035d4d7b8;hp=3adcf61f6b3ca1a9db664f3f4b771fd5a2bd057a;hpb=84a0666848ccbea920f0bd398baf149c1a12ea74;p=citadel.git diff --git a/citadel/sysdep_decls.h b/citadel/sysdep_decls.h index 3adcf61f6..7d02ba74b 100644 --- a/citadel/sysdep_decls.h +++ b/citadel/sysdep_decls.h @@ -11,10 +11,28 @@ */ -#include #include #include "sysdep.h" + +#ifdef HAVE_PTHREAD_H +#include +#endif + +#ifdef HAVE_DB_H +#include +#elif defined(HAVE_DB4_DB_H) +#include +#else +#error Neither nor was found by configure. Install db4-devel. +#endif + + +#if DB_VERSION_MAJOR < 4 || DB_VERSION_MINOR < 1 +#error Citadel requires Berkeley DB v4.1 or newer. Please upgrade. +#endif + #include "server.h" +#include "database.h" #if SIZEOF_SIZE_T == SIZEOF_INT #define SIZE_T_FMT "%d" @@ -58,8 +76,6 @@ extern pthread_key_t MyConKey; /* TSD key for MyContext() */ extern int enable_syslog; void init_sysdep (void); -void begin_critical_section (int which_one); -void end_critical_section (int which_one); int ig_tcp_server (char *ip_addr, int port_number, int queue_len,char **errormessage); int ig_uds_server(char *sockpath, int queue_len, char **errormessage); struct CitContext *MyContext (void); @@ -79,11 +95,11 @@ void start_daemon (int do_close_stdio); void cmd_nset (char *cmdbuf); int convert_login (char *NameToConvert); void *worker_thread (void *arg); +void *context_cleanup_thread (void *arg); void become_session(struct CitContext *which_con); void InitializeMasterCC(void); void init_master_fdset(void); void create_worker(void); -void InitialiseSemaphores(void); extern int num_sessions; @@ -95,57 +111,53 @@ extern volatile int restart_server; extern int verbosity; extern int rescan[]; -extern struct worker_node { - pthread_t tid; - struct worker_node *next; -} *worker_list; +extern int SyslogFacility(char *name); +extern int syslog_facility; + + /* - * Thread stuff + * Typdefs and stuff to abstract pthread for Citadel */ -#define CTDLTHREAD_BIGSTACK 0x0001 -#define CTDLTHREAD_WORKER 0x0002 - -void ctdl_internal_thread_gc (void); -void ctdl_thread_internal_init(void); -struct CtdlThreadNode *ctdl_internal_create_thread(char *name, long flags, void *(*thread_func) (void *arg), void *args); - -enum CtdlThreadState { - CTDL_THREAD_INVALID, - CTDL_THREAD_VALID, - CTDL_THREAD_CREATE, - CTDL_THREAD_CANCELLED, - CTDL_THREAD_EXITED, - CTDL_THREAD_STOPPING, - CTDL_THREAD_STOP_REQ, /* Do NOT put any running states before this state */ - CTDL_THREAD_SLEEPING, - CTDL_THREAD_RUNNING, - CTDL_THREAD_LAST_STATE -}; +#ifdef HAVE_PTHREAD_H + +typedef pthread_t citthread_t; +typedef pthread_key_t citthread_key_t; +typedef pthread_mutex_t citthread_mutex_t; +typedef pthread_cond_t citthread_cond_t; +typedef pthread_attr_t citthread_attr_t; + + +#define citthread_mutex_init pthread_mutex_init +#define citthread_cond_init pthread_cond_init +#define citthread_attr_init pthread_attr_init +#define citthread_mutex_trylock pthread_mutex_trylock +#define citthread_mutex_lock pthread_mutex_lock +#define citthread_mutex_unlock pthread_mutex_unlock +#define citthread_key_create pthread_key_create +#define citthread_getspecific pthread_getspecific +#define citthread_setspecific pthread_setspecific +#define citthread_mutex_destroy pthread_mutex_destroy +#define citthread_cond_destroy pthread_cond_destroy +#define citthread_attr_destroy pthread_attr_destroy + +#define citthread_kill pthread_kill +#define citthread_cond_signal pthread_cond_signal +#define citthread_cancel pthread_cancel +#define citthread_cond_timedwait pthread_cond_timedwait +#define citthread_equal pthread_equal +#define citthread_self pthread_self +#define citthread_create pthread_create +#define citthread_attr_setstacksize pthread_attr_setstacksize +#define citthread_join pthread_join +#define citthread_cleanup_push pthread_cleanup_push +#define citthread_cleanup_pop pthread_cleanup_pop + + +#endif /* HAVE_PTHREAD_H */ -extern struct CtdlThreadNode { - pthread_t tid; /* id as returned by pthread_create() */ - pid_t pid; /* pid, as best the OS will let us determine */ - struct CitConext *Context; /* The session context that this thread mught be working on or NULL if none */ - long number; /* A unigue number for this thread (not implimented yet) */ - int wakefd_recv; /* An fd that this thread can sleep on (not implimented yet) */ - int wakefd_send; /* An fd that this thread can send out on (Not implimented yet) */ - char *name; /* A name for this thread */ - void *(*thread_func) (void *arg); /* The actual function that does this threads work */ - void *user_args; /* Arguments passed to this threads work function */ - long flags; /* Flags that describe this thread */ - enum CtdlThreadState state; /* Flag to show state of this thread */ - pthread_mutex_t ThreadMutex; /* A mutex to sync this thread to others if this thread allows (also used for sleeping) */ - pthread_cond_t ThreadCond; /* A condition variable to sync this thread with others (also used for sleeping) */ - pthread_attr_t attr; /* Attributes of this thread */ - struct CtdlThreadNode *prev; /* Previous thread in the thread table */ - struct CtdlThreadNode *next; /* Next thread in the thread table */ -} *CtdlThreadList; - -extern int SyslogFacility(char *name); -extern int syslog_facility; #ifdef DEBUG_MEMORY_LEAKS #define malloc(x) tracked_malloc(x, __FILE__, __LINE__) @@ -160,6 +172,4 @@ char *tracked_strdup(const char *s, char *file, int line); void dump_heap(void); #endif -void create_maintenance_threads(void); - #endif /* SYSDEP_DECLS_H */