ioengines: clear out ->td_ops_dlhandle if we close it
[fio.git] / ioengines.c
index 1bfc06f96d12bf15f07e8aded629e8fa9c7cc92d..cec0c760f4a4a2c8c5cc089b8abc6d843dc492ea 100644 (file)
@@ -52,14 +52,12 @@ static bool check_engine_ops(struct ioengine_ops *ops)
 void unregister_ioengine(struct ioengine_ops *ops)
 {
        dprint(FD_IO, "ioengine %s unregistered\n", ops->name);
-       flist_del(&ops->list);
-       INIT_FLIST_HEAD(&ops->list);
+       flist_del_init(&ops->list);
 }
 
 void register_ioengine(struct ioengine_ops *ops)
 {
        dprint(FD_IO, "ioengine %s registered\n", ops->name);
-       INIT_FLIST_HEAD(&ops->list);
        flist_add_tail(&ops->list, &engine_list);
 }
 
@@ -196,8 +194,10 @@ void free_ioengine(struct thread_data *td)
                td->eo = NULL;
        }
 
-       if (td->io_ops_dlhandle)
+       if (td->io_ops_dlhandle) {
                dlclose(td->io_ops_dlhandle);
+               td->io_ops_dlhandle = NULL;
+       }
 
        td->io_ops = NULL;
 }
@@ -311,8 +311,10 @@ int td_io_queue(struct thread_data *td, struct io_u *io_u)
        }
 
        if (ddir_rw(ddir)) {
-               td->io_issues[ddir]++;
-               td->io_issue_bytes[ddir] += buflen;
+               if (!(io_u->flags & IO_U_F_VER_LIST)) {
+                       td->io_issues[ddir]++;
+                       td->io_issue_bytes[ddir] += buflen;
+               }
                td->rate_io_issue_bytes[ddir] += buflen;
        }