summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkay.sievers@vrfy.org <kay.sievers@vrfy.org>2004-02-05 01:35:08 -0800
committerGreg KH <gregkh@suse.de>2005-04-26 21:32:25 -0700
commit86590cd590a9f2fcc5917e8f5c85e024af1e58e0 (patch)
tree29d0de5205aa63af70a25ac1b68c77d1e517c2b1
parent16be1328898ed54d6b9cbc56ea113bf911450376 (diff)
[PATCH] udevd - allow to bypass sequence number
This patch allows udevsend to be called by the user and not only by the kernel with its SEQNUM. If no SEQNUM is given, we move the event straight to the exec queue and don't look if something is missing. I don't know if this is really needed, but some people seem trying to send events trough udevd instead of calling udev directly with their scripts and confuse the reorder logic with that. So at least, we may remove this source of confusion and udevsend is much much faster back than udev itself and it will also block concurrent events for the same devpath.
-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) {