From: Stephan Bosch Date: Thu, 13 Dec 2018 09:23:44 +0000 (+0100) Subject: global: Replace usleep() with i_sleep*_usecs and i_sleep*_msecs(). X-Git-Tag: 2.3.8~206 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4bf60d066ac0803685f79b4417ccbb3d410e2d53;p=thirdparty%2Fdovecot%2Fcore.git global: Replace usleep() with i_sleep*_usecs and i_sleep*_msecs(). This prevents overflows and makes sure signal interruptions are handled appropriately. --- diff --git a/src/doveadm/doveadm-master.c b/src/doveadm/doveadm-master.c index 6e989dbc38..66f39f70dd 100644 --- a/src/doveadm/doveadm-master.c +++ b/src/doveadm/doveadm-master.c @@ -6,6 +6,7 @@ #include "istream.h" #include "write-full.h" #include "master-service.h" +#include "sleep.h" #include "doveadm.h" #include "doveadm-print.h" @@ -68,14 +69,14 @@ void doveadm_master_send_signal(int signo) if (signo == SIGTERM) { /* wait for a while for the process to die */ - usleep(1000); + i_sleep_msecs(1); for (i = 0; i < 30; i++) { if (kill(pid, 0) < 0) { if (errno != ESRCH) i_error("kill() failed: %m"); break; } - usleep(100000); + i_sleep_msecs(100); } } } diff --git a/src/lib-http/test-http-client-errors.c b/src/lib-http/test-http-client-errors.c index d6277d14ac..aa8d48e080 100644 --- a/src/lib-http/test-http-client-errors.c +++ b/src/lib-http/test-http-client-errors.c @@ -8,6 +8,7 @@ #include "istream-chain.h" #include "ostream.h" #include "time-util.h" +#include "sleep.h" #include "connection.h" #include "test-common.h" #include "http-url.h" @@ -1417,7 +1418,7 @@ test_early_success_input(struct server_connection *conn) "\r\n" "Everything is OK\r\n"; - usleep(200000); + i_sleep_msecs(200); o_stream_nsend_str(conn->conn.output, resp); server_connection_deinit(&conn); } @@ -3426,7 +3427,7 @@ static void test_run_client_server( /* parent: client */ - usleep(100000); /* wait a little for server setup */ + i_sleep_msecs(100); /* wait a little for server setup */ ioloop = io_loop_create(); test_client_run(client_test, client_set); diff --git a/src/lib-http/test-http-server-errors.c b/src/lib-http/test-http-server-errors.c index 7f8d34be2a..2ac4c51982 100644 --- a/src/lib-http/test-http-server-errors.c +++ b/src/lib-http/test-http-server-errors.c @@ -7,6 +7,7 @@ #include "istream.h" #include "ostream.h" #include "time-util.h" +#include "sleep.h" #include "connection.h" #include "test-common.h" #include "http-url.h" @@ -812,7 +813,8 @@ static void test_run_client_server( if (debug) i_debug("client[%d]: PID=%s", i+1, my_pid); /* child: client */ - usleep(100000); /* wait a little for server setup */ + /* wait a little for server setup */ + i_sleep_msecs(100); i_close_fd(&fd_listen); ioloop = io_loop_create(); client_test(i); diff --git a/src/lib-imap-client/test-imapc-client.c b/src/lib-imap-client/test-imapc-client.c index 4f4da355cc..ea41239530 100644 --- a/src/lib-imap-client/test-imapc-client.c +++ b/src/lib-imap-client/test-imapc-client.c @@ -8,6 +8,7 @@ #include "ostream.h" #include "ioloop.h" #include "unlink-directory.h" +#include "sleep.h" #include "test-common.h" #include "imapc-client-private.h" @@ -152,7 +153,7 @@ static void test_run_client_server( } /* parent: client */ - usleep(100000); /* wait a little for server setup */ + i_sleep_msecs(100); /* wait a little for server setup */ ioloop = io_loop_create(); imapc_client = imapc_client_init(&client_set_copy); diff --git a/src/lib-master/test-event-stats.c b/src/lib-master/test-event-stats.c index 7f6b3169d3..fe250c3e16 100644 --- a/src/lib-master/test-event-stats.c +++ b/src/lib-master/test-event-stats.c @@ -5,6 +5,7 @@ #include "time-util.h" #include "lib-event-private.h" #include "str.h" +#include "sleep.h" #include "ioloop.h" #include "connection.h" #include "ostream.h" @@ -199,7 +200,7 @@ static void wait_for_signal(const char *signal_file) i_fatal("gettimeofday() failed %m"); } while (access(signal_file, F_OK) < 0) { - usleep(10000); + i_sleep_msecs(10); if (gettimeofday(&now, NULL) < 0) { kill_stats_child(); i_fatal("gettimeofday() failed %m"); diff --git a/src/lib-smtp/test-smtp-client-errors.c b/src/lib-smtp/test-smtp-client-errors.c index 134a44e54d..ec190e000b 100644 --- a/src/lib-smtp/test-smtp-client-errors.c +++ b/src/lib-smtp/test-smtp-client-errors.c @@ -11,6 +11,7 @@ #include "istream-failure-at.h" #include "ostream.h" #include "time-util.h" +#include "sleep.h" #include "connection.h" #include "test-common.h" #include "smtp-client.h" @@ -3877,7 +3878,7 @@ static void test_run_client_server( /* parent: client */ - usleep(100000); /* wait a little for server setup */ + i_sleep_msecs(100); /* wait a little for server setup */ lib_signals_ignore(SIGPIPE, TRUE); ioloop = io_loop_create(); diff --git a/src/lib-smtp/test-smtp-server-errors.c b/src/lib-smtp/test-smtp-server-errors.c index 0870dbbae5..d23b760f7f 100644 --- a/src/lib-smtp/test-smtp-server-errors.c +++ b/src/lib-smtp/test-smtp-server-errors.c @@ -8,6 +8,7 @@ #include "istream.h" #include "ostream.h" #include "time-util.h" +#include "sleep.h" #include "connection.h" #include "test-common.h" #include "smtp-address.h" @@ -2301,7 +2302,8 @@ static void test_run_client_server( if (debug) i_debug("PID=%s", my_pid); /* child: client */ - usleep(100000); /* wait a little for server setup */ + /* wait a little for server setup */ + i_sleep_msecs(100); i_close_fd(&fd_listen); ioloop = io_loop_create(); client_test(i); diff --git a/src/lib-smtp/test-smtp-submit.c b/src/lib-smtp/test-smtp-submit.c index 99eff43ee5..df22850b86 100644 --- a/src/lib-smtp/test-smtp-submit.c +++ b/src/lib-smtp/test-smtp-submit.c @@ -9,6 +9,7 @@ #include "istream-chain.h" #include "ostream.h" #include "time-util.h" +#include "sleep.h" #include "unlink-directory.h" #include "write-full.h" #include "connection.h" @@ -2115,7 +2116,7 @@ static void test_run_client_server( /* parent: client */ - usleep(100000); /* wait a little for server setup */ + i_sleep_msecs(100); /* wait a little for server setup */ server_port = 0; ioloop = io_loop_create(); diff --git a/src/lib-storage/index/mbox/mbox-sync.c b/src/lib-storage/index/mbox/mbox-sync.c index 6793d61c67..1198610b30 100644 --- a/src/lib-storage/index/mbox/mbox-sync.c +++ b/src/lib-storage/index/mbox/mbox-sync.c @@ -41,6 +41,7 @@ #include "str.h" #include "read-full.h" #include "write-full.h" +#include "sleep.h" #include "message-date.h" #include "istream-raw-mbox.h" #include "mbox-storage.h" @@ -1490,7 +1491,7 @@ static int mbox_sync_update_index_header(struct mbox_sync_context *sync_ctx) performance problem and the consequences of being wrong are quite minimal (an extra logged error message). */ while (sync_ctx->orig_mtime == st->st_mtime) { - usleep(500000); + i_sleep_msecs(500); if (utime(mailbox_get_path(&sync_ctx->mbox->box), NULL) < 0) { mbox_set_syscall_error(sync_ctx->mbox, "utime()"); diff --git a/src/lib-storage/list/mailbox-list-delete.c b/src/lib-storage/list/mailbox-list-delete.c index 6cfbd8b4ed..ca773ee727 100644 --- a/src/lib-storage/list/mailbox-list-delete.c +++ b/src/lib-storage/list/mailbox-list-delete.c @@ -5,6 +5,7 @@ #include "hex-binary.h" #include "hostpid.h" #include "randgen.h" +#include "sleep.h" #include "unlink-directory.h" #include "mailbox-list-private.h" #include "mailbox-list-delete.h" @@ -232,7 +233,7 @@ int mailbox_list_delete_mailbox_nonrecursive(struct mailbox_list *list, lying around. In case it's .nfs* files, retry after waiting a bit. Hopefully all processes keeping those files open will have closed them by then. */ - usleep(100000); + i_sleep_msecs(100); ret = rmdir(path); } if (rmdir(path) == 0) diff --git a/src/lib/file-dotlock.c b/src/lib/file-dotlock.c index 4be06c4328..b3e9d29b7f 100644 --- a/src/lib/file-dotlock.c +++ b/src/lib/file-dotlock.c @@ -11,6 +11,7 @@ #include "safe-mkstemp.h" #include "nfs-workarounds.h" #include "file-dotlock.h" +#include "sleep.h" #include #include @@ -198,7 +199,7 @@ static int dotlock_override(struct lock_info *lock_info) otherwise another process might try to override it at the same time and unlink our newly created dotlock. */ if (lock_info->use_io_notify) - usleep(LOCK_RANDOM_USLEEP_TIME); + i_sleep_usecs(LOCK_RANDOM_USLEEP_TIME); return 0; } @@ -433,7 +434,7 @@ static void dotlock_wait(struct lock_info *lock_info) struct timeout *to; if (!lock_info->use_io_notify) { - usleep(lock_info->wait_usecs); + i_sleep_usecs(lock_info->wait_usecs); return; } @@ -450,7 +451,7 @@ static void dotlock_wait(struct lock_info *lock_info) /* listening for files not supported */ io_loop_destroy(&ioloop); lock_info->use_io_notify = FALSE; - usleep(LOCK_RANDOM_USLEEP_TIME); + i_sleep_usecs(LOCK_RANDOM_USLEEP_TIME); return; } /* timeout after a random time even when using notify, since it diff --git a/src/lib/ioloop-epoll.c b/src/lib/ioloop-epoll.c index 34e4098cae..ad4100865f 100644 --- a/src/lib/ioloop-epoll.c +++ b/src/lib/ioloop-epoll.c @@ -2,6 +2,7 @@ #include "lib.h" #include "array.h" +#include "sleep.h" #include "ioloop-private.h" #include "ioloop-iolist.h" @@ -186,7 +187,7 @@ void io_loop_handler_run_internal(struct ioloop *ioloop) /* no I/Os, but we should have some timeouts. just wait for them. */ i_assert(msecs >= 0); - usleep(msecs*1000); + i_sleep_intr_msecs(msecs); ret = 0; } diff --git a/src/lib/ioloop-kqueue.c b/src/lib/ioloop-kqueue.c index 6b4db3f709..061b1b1315 100644 --- a/src/lib/ioloop-kqueue.c +++ b/src/lib/ioloop-kqueue.c @@ -9,6 +9,7 @@ #ifdef IOLOOP_KQUEUE #include "array.h" +#include "sleep.h" #include "ioloop-private.h" #include @@ -135,7 +136,7 @@ void io_loop_handler_run_internal(struct ioloop *ioloop) } } else { i_assert(msecs >= 0); - usleep(msecs * 1000); + i_sleep_intr_msecs(msecs); ret = 0; } diff --git a/src/lib/test-file-create-locked.c b/src/lib/test-file-create-locked.c index 621d7331a3..8bbefcf511 100644 --- a/src/lib/test-file-create-locked.c +++ b/src/lib/test-file-create-locked.c @@ -3,6 +3,7 @@ #include "test-lib.h" #include "unlink-directory.h" #include "file-create-locked.h" +#include "sleep.h" #include #include @@ -32,7 +33,7 @@ static bool wait_for_file(pid_t pid, const char *path) return FALSE; i_fatal("kill(SIGSRCH) failed: %m"); } - usleep(10000); + i_sleep_msecs(10); } i_error("%s isn't being created", path); return FALSE; diff --git a/src/master/service-monitor.c b/src/master/service-monitor.c index 5e4938d195..748727f2c1 100644 --- a/src/master/service-monitor.c +++ b/src/master/service-monitor.c @@ -7,6 +7,7 @@ #include "str.h" #include "safe-mkstemp.h" #include "time-util.h" +#include "sleep.h" #include "master-client.h" #include "service.h" #include "service-process.h" @@ -587,7 +588,7 @@ static void services_monitor_wait(struct service_list *service_list) if (finished || timeval_diff_msecs(&ioloop_timeval, &tv_start) > MAX_DIE_WAIT_MSECS) break; - usleep(100000); + i_sleep_msecs(100); } } @@ -637,7 +638,7 @@ static void services_monitor_wait_and_kill(struct service_list *service_list) if (service_list_processes_close_listeners(service_list)) { /* SIGQUITs were sent. wait a little bit to make sure they're also processed before quitting. */ - usleep(1000000); + i_sleep_msecs(1000); } }