chiark / gitweb /
use nanosleep() instead of usleep()
[elogind.git] / extras / scsi_id / scsi_serial.c
index 0f883dc02f19b7c86d14e2611e3f885600d4f922..2e9168f9419de2b3c53e880142c4d907d4c5f37d 100644 (file)
@@ -23,6 +23,7 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <syslog.h>
+#include <time.h>
 #include <inttypes.h>
 #include <scsi/scsi.h>
 #include <scsi/sg.h>
@@ -846,13 +847,15 @@ int scsi_get_serial(struct udev *udev,
        memset(dev_scsi->serial, 0, len);
        dbg(udev, "opening %s\n", devname);
        while (--cnt) {
+               const struct timespec duration = { 0, 500 * 1000 * 1000 };
+
                fd = open(devname, O_RDONLY | O_NONBLOCK);
                if (fd >= 0)
                        break;
                info(udev, "%s: cannot open %s: %s\n", dev_scsi->kernel, devname, strerror(errno));
                if (errno != EBUSY)
                        break;
-               usleep(500000 + (rand() % 100000) );
+               nanosleep(&duration, NULL);
        }
        if (fd < 0)
                return 1;