diff options
-rw-r--r-- | udevd.c | 26 | ||||
-rw-r--r-- | udevsend.c | 9 |
2 files changed, 23 insertions, 12 deletions
@@ -205,16 +205,20 @@ static void *exec_queue_manager(void * parm) } } -/* move message from incoming to exec queue */ -static void msg_move_exec(struct list_head *head) +static void exec_queue_activate(void) { - 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); } +/* move message from incoming to exec queue */ +static void msg_move_exec(struct list_head *head) +{ + list_move_tail(head, &exec_list); + exec_queue_activate(); +} + /* queue management thread handles the timeouts and dispatches the events */ static void *msg_queue_manager(void * parm) { @@ -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) { |