diff --git a/udevd.c b/udevd.c index 331b7e4b84..f8b8c27ee4 100644 --- a/udevd.c +++ b/udevd.c @@ -205,14 +205,18 @@ static void *exec_queue_manager(void * parm) } } +static void exec_queue_activate(void) +{ + pthread_mutex_lock(&exec_active_lock); + pthread_cond_signal(&exec_active); + pthread_mutex_unlock(&exec_active_lock); +} + /* move message from incoming to exec queue */ static void msg_move_exec(struct list_head *head) { list_move_tail(head, &exec_list); - /* signal queue activity to manager */ - pthread_mutex_lock(&exec_active_lock); - pthread_cond_signal(&exec_active); - pthread_mutex_unlock(&exec_active_lock); + exec_queue_activate(); } /* queue management thread handles the timeouts and dispatches the events */ @@ -298,9 +302,17 @@ static void *client_threads(void * parm) goto exit; } - pthread_mutex_lock(&msg_lock); - msg_queue_insert(msg); - pthread_mutex_unlock(&msg_lock); + /* if no seqnum is given, we move straight to exec queue */ + if (msg->seqnum == 0) { + pthread_mutex_lock(&exec_lock); + list_add(&msg->list, &exec_list); + exec_queue_activate(); + pthread_mutex_unlock(&exec_lock); + } else { + pthread_mutex_lock(&msg_lock); + msg_queue_insert(msg); + pthread_mutex_unlock(&msg_lock); + } exit: close(sock); diff --git a/udevsend.c b/udevsend.c index d3c74dd46a..9dc2b2e841 100644 --- a/udevsend.c +++ b/udevsend.c @@ -148,11 +148,10 @@ int main(int argc, char* argv[]) } seqnum = get_seqnum(); - if (seqnum == NULL) { - dbg("no seqnum"); - goto exit; - } - seq = atoi(seqnum); + if (seqnum == NULL) + seq = 0; + else + seq = atoi(seqnum); sock = socket(AF_LOCAL, SOCK_STREAM, 0); if (sock == -1) {