diff options
author | Vijay Bellur <vbellur@redhat.com> | 2019-06-20 15:50:01 -0700 |
---|---|---|
committer | Xavi Hernandez <xhernandez@redhat.com> | 2019-07-11 10:37:52 +0000 |
commit | 3c1efa0c92445638bbfa57c2e868c79f7d987fc3 (patch) | |
tree | 3cc28f420d5aebe771de4985fc669dd99e8a42fa /libglusterfs/src/common-utils.c | |
parent | b82743a5822626e83b233956803421fda9b1c3f9 (diff) |
Replace usleep() with nanosleep()
As usleep has been obsoleted, changed all invocations of usleep
to nanosleep. From man 3 usleep:
"4.3BSD, POSIX.1-2001. POSIX.1-2001 declares this function
obsolete; use nanosleep(2) instead. POSIX.1-2008 removes the
specification of usleep()."
Added a helper function gf_nanosleep() to have a single place
for handling edge cases that might arise from the conversion of
usleep to nanosleep and allow the sleep to resume with right
remaining value upon being interrupted.
Fixes: bz#1721686
Change-Id: Ia39ab82c9e0f4669d2c00d4cdf25e38d94ef9f62
Signed-off-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'libglusterfs/src/common-utils.c')
-rw-r--r-- | libglusterfs/src/common-utils.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c index 8e2ffa3accd..132e63e520a 100644 --- a/libglusterfs/src/common-utils.c +++ b/libglusterfs/src/common-utils.c @@ -5421,3 +5421,21 @@ gf_d_type_from_ia_type(ia_type_t type) return DT_UNKNOWN; } } + +int +gf_nanosleep(uint64_t nsec) +{ + struct timespec req; + struct timespec rem; + int ret = -1; + + req.tv_sec = nsec / GF_SEC_IN_NS; + req.tv_nsec = nsec % GF_SEC_IN_NS; + + do { + ret = nanosleep(&req, &rem); + req = rem; + } while (ret == -1 && errno == EINTR); + + return ret; +} |