dyndns_queue
static dyndns_queue_t dyndns_queue;
(void) mutex_lock(&dyndns_queue.ddq_mtx);
if (dyndns_queue.ddq_state != DYNDNS_STATE_INIT) {
(void) mutex_unlock(&dyndns_queue.ddq_mtx);
list_create(&dyndns_queue.ddq_list, sizeof (dyndns_qentry_t),
dyndns_queue.ddq_state = DYNDNS_STATE_READY;
(void) mutex_unlock(&dyndns_queue.ddq_mtx);
(void) mutex_lock(&dyndns_queue.ddq_mtx);
switch (dyndns_queue.ddq_state) {
dyndns_queue.ddq_state = DYNDNS_STATE_STOPPING;
(void) cond_signal(&dyndns_queue.ddq_cv);
(void) mutex_unlock(&dyndns_queue.ddq_mtx);
(void) mutex_lock(&dyndns_queue.ddq_mtx);
switch (dyndns_queue.ddq_state) {
list_insert_tail(&dyndns_queue.ddq_list, entry);
(void) cond_signal(&dyndns_queue.ddq_cv);
(void) mutex_unlock(&dyndns_queue.ddq_mtx);
(void) mutex_lock(&dyndns_queue.ddq_mtx);
if (dyndns_queue.ddq_state != DYNDNS_STATE_READY) {
(void) mutex_unlock(&dyndns_queue.ddq_mtx);
dyndns_queue.ddq_state = DYNDNS_STATE_PUBLISHING;
(void) mutex_unlock(&dyndns_queue.ddq_mtx);
(void) mutex_lock(&dyndns_queue.ddq_mtx);
while (list_is_empty(&dyndns_queue.ddq_list) &&
(dyndns_queue.ddq_state == DYNDNS_STATE_PUBLISHING)) {
(void) cond_wait(&dyndns_queue.ddq_cv,
&dyndns_queue.ddq_mtx);
if (dyndns_queue.ddq_state != DYNDNS_STATE_PUBLISHING) {
(void) mutex_unlock(&dyndns_queue.ddq_mtx);
while ((entry = list_head(&dyndns_queue.ddq_list)) != NULL) {
list_remove(&dyndns_queue.ddq_list, entry);
(void) mutex_unlock(&dyndns_queue.ddq_mtx);
(void) mutex_lock(&dyndns_queue.ddq_mtx);
dyndns_queue_flush(&dyndns_queue.ddq_list);
list_destroy(&dyndns_queue.ddq_list);
dyndns_queue.ddq_state = DYNDNS_STATE_INIT;
(void) mutex_unlock(&dyndns_queue.ddq_mtx);
(void) mutex_lock(&dyndns_queue.ddq_mtx);
if (dyndns_queue.ddq_state != DYNDNS_STATE_PUBLISHING) {
(void) mutex_unlock(&dyndns_queue.ddq_mtx);
(void) mutex_unlock(&dyndns_queue.ddq_mtx);