ctl_msg
typedef struct ctl_msg CTL_MSG;
typedef struct ctl_msg CTL_MSG;
(m)->next = ctl_msg.head; \
ctl_msg.head = (m); \
ctl_msg.head = (m)->next; \
#define PASS2XSCF(m, r) ((r = SCF_PUTINFO(ctl_msg.scf_service_function, \
} ctl_msg;
mutex_enter(&ctl_msg.nm_lock);
if (ctl_msg.nmt == NULL) {
ctl_msg.nmt = thread_create(NULL, 0, pass2xscf_thread,
ctl_msg.cnt++;
mutex_exit(&ctl_msg.nm_lock);
mutex_enter(&ctl_msg.nm_lock);
if (ctl_msg.scf_service_function == NULL) {
if ((ctl_msg.scf_service_function =
ctl_msg.nmt = NULL;
mutex_exit(&ctl_msg.nm_lock);
while (ctl_msg.cnt != 0) {
ctl_msg.now_serving = ctl_msg.head;
ASSERT(ctl_msg.now_serving != NULL);
FREE_THE_TAIL(ctl_msg.now_serving);
ctl_msg.cnt = 1;
mutex_exit(&ctl_msg.nm_lock);
if (PASS2XSCF(ctl_msg.now_serving, ret)) {
mutex_enter(&ctl_msg.nm_lock);
msg = ctl_msg.now_serving;
ctl_msg.now_serving = NULL;
ctl_msg.cnt--;
mutex_exit(&ctl_msg.nm_lock);
mutex_enter(&ctl_msg.nm_lock);
ctl_msg.nmt = NULL;
mutex_exit(&ctl_msg.nm_lock);