/* Application server thread management structures and functions */ /* A server puts itself on an idle queue for a service using an * instance of the following structure. When a call arrives, the call * structure pointer is placed in "newcall", the routine to execute to * service the request is placed in executeRequestProc, and the * process is woken up. The queue entry's address is used for the * sleep/wakeup. If socketp is non-null, then this thread is willing * to become a listener thread. A thread sets *socketp to -1 before * sleeping. If *socketp is not -1 when the thread awakes, it is now * the listener thread for *socketp. When socketp is non-null, tno * contains the server's threadID, which is used to make decisions * in GetCall. */ #ifdef KDUMP_RX_LOCK struct rx_serverQueueEntry_rx_lock { #else struct rx_serverQueueEntry { #endif struct opr_queue entry; #ifdef KDUMP_RX_LOCK struct rx_call_rx_lock *newcall; #else struct rx_call *newcall; #endif #ifdef RX_ENABLE_LOCKS afs_kmutex_t lock; afs_kcondvar_t cv; #endif int tno; osi_socket *socketp; };