summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--udevd.c26
-rw-r--r--udevsend.c9
2 files changed, 23 insertions, 12 deletions
diff --git a/udevd.c b/udevd.c
index 331b7e4b84..f8b8c27ee4 100644
--- a/udevd.c
+++ b/udevd.c
@@ -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) {