Ensure we quit on SIGTERM
[fio.git] / diskutil.c
index ac2f006e08597913417d293dbd3a67181fb4c223..4f705c9bb5761a6e302598163cd1d44027d8933c 100644 (file)
@@ -24,6 +24,14 @@ static void disk_util_free(struct disk_util *du)
        if (du == last_du)
                last_du = NULL;
 
+       while (!flist_empty(&du->slaves)) {
+               struct disk_util *slave;
+
+               slave = flist_entry(du->slaves.next, struct disk_util, slavelist);
+               flist_del(&slave->slavelist);
+               slave->users--;
+       }
+       
        fio_mutex_remove(du->lock);
        sfree(du->name);
        sfree(du);
@@ -67,10 +75,10 @@ static void update_io_tick_disk(struct disk_util *du)
        struct disk_util_stat __dus, *dus, *ldus;
        struct timeval t;
 
-       if (get_io_ticks(du, &__dus))
-               return;
        if (!du->users)
                return;
+       if (get_io_ticks(du, &__dus))
+               return;
 
        dus = &du->dus;
        ldus = &du->last_dus;
@@ -545,7 +553,6 @@ void show_disk_util(void)
        flist_for_each_safe(entry, next, &disk_list) {
                flist_del(entry);
                du = flist_entry(entry, struct disk_util, list);
-               du->users--;
                disk_util_free(du);
        }
 }