X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=server.c;h=90c52e01ac231f4972bbd94e91361d3fe61ad132;hb=53b5fa1ea4f821899440637ab632ce0e1687c916;hp=558c599b7b397b5b82f350768055f18296f65cad;hpb=56440e63ac17d020a58e20a2341333a98f18a7ff;p=fio.git diff --git a/server.c b/server.c index 558c599b..90c52e01 100644 --- a/server.c +++ b/server.c @@ -409,8 +409,9 @@ struct fio_net_cmd *fio_net_recv_cmd(int sk, bool wait) if (cmdret->opcode == FIO_NET_CMD_TEXT) { struct cmd_text_pdu *__pdu = (struct cmd_text_pdu *) cmdret->payload; char *buf = (char *) __pdu->buf; + int len = le32_to_cpu(__pdu->buf_len); - buf[__pdu->buf_len] = '\0'; + buf[len] = '\0'; } else if (cmdret->opcode == FIO_NET_CMD_JOB) { struct cmd_job_pdu *__pdu = (struct cmd_job_pdu *) cmdret->payload; char *buf = (char *) __pdu->buf; @@ -950,7 +951,7 @@ static int handle_update_job_cmd(struct fio_net_cmd *cmd) return 0; } - td = &threads[tnumber - 1]; + td = tnumber_to_td(tnumber); convert_thread_options_to_cpu(&td->o, &pdu->top); send_update_job_reply(cmd->tag, 0); return 0; @@ -1579,10 +1580,10 @@ void fio_server_send_ts(struct thread_stat *ts, struct group_run_stats *rs) for (i = 0; i < DDIR_RWDIR_CNT; i++) { for (j = 0; j < FIO_IO_U_PLAT_NR; j++) { p.ts.io_u_plat_high_prio[i][j] = cpu_to_le64(ts->io_u_plat_high_prio[i][j]); - p.ts.io_u_plat_prio[i][j] = cpu_to_le64(ts->io_u_plat_prio[i][j]); + p.ts.io_u_plat_low_prio[i][j] = cpu_to_le64(ts->io_u_plat_low_prio[i][j]); } convert_io_stat(&p.ts.clat_high_prio_stat[i], &ts->clat_high_prio_stat[i]); - convert_io_stat(&p.ts.clat_prio_stat[i], &ts->clat_prio_stat[i]); + convert_io_stat(&p.ts.clat_low_prio_stat[i], &ts->clat_low_prio_stat[i]); } convert_gs(&p.rs, rs); @@ -1909,7 +1910,7 @@ static int fio_append_iolog_gz(struct sk_entry *first, struct io_log *log) break; } flist_add_tail(&entry->list, &first->next); - } while (ret != Z_STREAM_END); + } ret = deflateEnd(&stream); if (ret == Z_OK) @@ -2456,6 +2457,11 @@ static void set_sig_handlers(void) }; sigaction(SIGINT, &act, NULL); + + /* Windows uses SIGBREAK as a quit signal from other applications */ +#ifdef WIN32 + sigaction(SIGBREAK, &act, NULL); +#endif } void fio_server_destroy_sk_key(void) @@ -2564,6 +2570,7 @@ static int write_pid(pid_t pid, const char *pidfile) */ int fio_start_server(char *pidfile) { + FILE *file; pid_t pid; int ret; @@ -2596,14 +2603,28 @@ int fio_start_server(char *pidfile) setsid(); openlog("fio", LOG_NDELAY|LOG_NOWAIT|LOG_PID, LOG_USER); log_syslog = true; - close(STDIN_FILENO); - close(STDOUT_FILENO); - close(STDERR_FILENO); + + file = freopen("/dev/null", "r", stdin); + if (!file) + perror("freopen"); + + file = freopen("/dev/null", "w", stdout); + if (!file) + perror("freopen"); + + file = freopen("/dev/null", "w", stderr); + if (!file) + perror("freopen"); + f_out = NULL; f_err = NULL; ret = fio_server(); + fclose(stdin); + fclose(stdout); + fclose(stderr); + closelog(); unlink(pidfile); free(pidfile);