extern long cm_daemonCheckLockInterval;
extern long cm_daemonTokenCheckInterval;
-extern osi_rwlock_t cm_daemonLock;
+extern osi_rwlock_t *cm_daemonLockp;
+extern int cm_nDaemons;
void cm_DaemonShutdown(void);
void cm_InitDaemon(int nDaemons);
-typedef afs_int32 (cm_bkgProc_t)(cm_scache_t *scp, afs_uint32 p1, afs_uint32 p2, afs_uint32 p3,
- afs_uint32 p4, struct cm_user *up, cm_req_t *reqp);
+/* cm_bkgProc_t must free the rock */
+typedef afs_int32 (cm_bkgProc_t)(cm_scache_t *scp, void *rockp, struct cm_user *userp, cm_req_t *reqp);
typedef struct cm_bkgRequest {
- osi_queue_t q;
- cm_bkgProc_t *procp;
- cm_scache_t *scp;
- afs_uint32 p1;
- afs_uint32 p2;
- afs_uint32 p3;
- afs_uint32 p4;
- cm_user_t *userp;
- cm_req_t req;
+ osi_queue_t q;
+ cm_bkgProc_t *procp;
+ void * rockp;
+ cm_scache_t *scp;
+ cm_user_t *userp;
+ cm_req_t req;
} cm_bkgRequest_t;
-extern void cm_QueueBKGRequest(cm_scache_t *scp, cm_bkgProc_t *procp, afs_uint32 p1,
- afs_uint32 p2, afs_uint32 p3, afs_uint32 p4, cm_user_t *userp, cm_req_t *reqp);
+extern int cm_QueueBKGRequest(cm_scache_t *scp, cm_bkgProc_t *procp, void *rockp, cm_user_t *userp, cm_req_t *reqp);
+/* Daemon count must be divisible by two */
+#define CM_MIN_DAEMONS 2
#define CM_MAX_DAEMONS 64
#endif /* OPENAFS_WINNT_AFSD_CM_DAEMON_H */