client: fix potential buffer overrun in socket path
[fio.git] / iolog.c
diff --git a/iolog.c b/iolog.c
index e805eaef9a94595cb5327becf0eb931362179b8a..f49895929c34fcc3313a9ce6b6500d1e3277c9b6 100644 (file)
--- a/iolog.c
+++ b/iolog.c
@@ -58,6 +58,7 @@ void log_file(struct thread_data *td, struct fio_file *f,
 static void iolog_delay(struct thread_data *td, unsigned long delay)
 {
        unsigned long usec = utime_since_now(&td->last_issue);
+       unsigned long this_delay;
 
        if (delay < usec)
                return;
@@ -70,7 +71,14 @@ static void iolog_delay(struct thread_data *td, unsigned long delay)
        if (delay < 100)
                return;
 
-       usec_sleep(td, delay);
+       while (delay && !td->terminate) {
+               this_delay = delay;
+               if (this_delay > 500000)
+                       this_delay = 500000;
+
+               usec_sleep(td, this_delay);
+               delay -= this_delay;
+       }
 }
 
 static int ipo_special(struct thread_data *td, struct io_piece *ipo)
@@ -371,7 +379,7 @@ static int read_iolog2(struct thread_data *td, FILE *f)
                } else {
                        ipo->offset = offset;
                        ipo->len = bytes;
-                       if (bytes > td->o.max_bs[rw])
+                       if (rw != DDIR_INVAL && bytes > td->o.max_bs[rw])
                                td->o.max_bs[rw] = bytes;
                        ipo->fileno = fileno;
                        ipo->file_action = file_action;