From: Kay Sievers Date: Thu, 23 Apr 2009 11:23:45 +0000 (+0200) Subject: libudev: queue - fix get_seqnum_is_finished() X-Git-Tag: 174~1076 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=8c3ae78546a535cc9288a190680fb1eb88c6ea7e;hp=08a7a795f61eaf42f31b26e435067a664f0a4d4d libudev: queue - fix get_seqnum_is_finished() On Thu, Apr 23, 2009 at 11:39, Alan Jenkins wrote: > I'm puzzled by this function: > > /* if we have not seen this seqnum, check if it is/was already queued */ > if (seqnum < udev_queue->last_seen_udev_seqnum) { > udev_queue_get_udev_seqnum(udev_queue); > if (seqnum < udev_queue->last_seen_udev_seqnum) > > Shouldn't the test be (seqnum > udev_queue->last_seen_udev_seqnum) ? --- diff --git a/udev/lib/libudev-queue.c b/udev/lib/libudev-queue.c index a0f4c5575..7550d9637 100644 --- a/udev/lib/libudev-queue.c +++ b/udev/lib/libudev-queue.c @@ -179,11 +179,10 @@ int udev_queue_get_seqnum_is_finished(struct udev_queue *udev_queue, unsigned lo if (udev_queue == NULL) return -EINVAL; /* if we have not seen this seqnum, check if it is/was already queued */ - if (seqnum < udev_queue->last_seen_udev_seqnum) { - udev_queue_get_udev_seqnum(udev_queue); - if (seqnum < udev_queue->last_seen_udev_seqnum) + if (seqnum > udev_queue->last_seen_udev_seqnum) + if (seqnum > udev_queue_get_udev_seqnum(udev_queue)) return 0; - } + snprintf(filename, sizeof(filename), "%s/.udev/queue/%llu", udev_get_dev_path(udev_queue->udev), seqnum); if (lstat(filename, &statbuf) == 0)