chiark / gitweb /
udevadm: settle - add verbose output when running into timeout
authorMarco d'Itri <md@linux.it>
Thu, 10 Jul 2008 22:52:22 +0000 (00:52 +0200)
committerKay Sievers <kay.sievers@vrfy.org>
Thu, 10 Jul 2008 22:52:22 +0000 (00:52 +0200)
udevsettle.c

index 4b66f89cd64034a004a46c7626428a291b8ece34..cb63a66bba6bf624cf76a2ea95c4e94ab5bbfbc9 100644 (file)
 #define DEFAULT_TIMEOUT                        180
 #define LOOP_PER_SECOND                        20
 
+static void print_queue(const char *dir)
+{
+       LIST_HEAD(files);
+       struct name_entry *item;
+
+       if (add_matching_files(&files, dir, NULL) < 0)
+               return;
+
+       printf("\n\nAfter the udevadm settle timeout, the events queue contains:\n\n");
+
+       list_for_each_entry(item, &files, node) {
+               char target[NAME_SIZE];
+               size_t len;
+               const char *filename = strrchr(item->name, '/');
+
+               if (filename == NULL)
+                       continue;
+               filename++;
+               if (*filename == '\0')
+                       continue;
+
+               len = readlink(item->name, target, sizeof(target));
+               if (len < 0)
+                       continue;
+               target[len] = '\0';
+
+               printf("%s: %s\n", filename, target);
+       }
+
+       printf("\n\n");
+}
+
 int udevsettle(int argc, char *argv[], char *envp[])
 {
        char queuename[PATH_SIZE];
@@ -97,6 +129,7 @@ int udevsettle(int argc, char *argv[], char *envp[])
                }
                if (loop <= 0) {
                        info("timeout waiting for queue\n");
+                       print_queue(queuename);
                        goto exit;
                }