From: Yehuda Sadeh Date: Fri, 15 Jan 2016 18:39:09 +0000 (-0800) Subject: rgw: fix do_curl_wait() if curl_multi_wait() not defined X-Git-Tag: v10.1.0~354^2~46 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5c2b519d4a95e950dfb992550619f8d32e1cae1e;p=ceph.git rgw: fix do_curl_wait() if curl_multi_wait() not defined needed for older systems Signed-off-by: Yehuda Sadeh --- diff --git a/src/rgw/rgw_http_client.cc b/src/rgw/rgw_http_client.cc index 1c241ba43d13..c233d93a1d70 100644 --- a/src/rgw/rgw_http_client.cc +++ b/src/rgw/rgw_http_client.cc @@ -281,7 +281,7 @@ static int do_curl_wait(CephContext *cct, CURLM *handle, int signal_fd) #else -static int do_curl_wait(CephContext *cct, CURLM *handle) +static int do_curl_wait(CephContext *cct, CURLM *handle, int signal_fd) { fd_set fdread; fd_set fdwrite; @@ -295,10 +295,14 @@ static int do_curl_wait(CephContext *cct, CURLM *handle) /* get file descriptors from the transfers */ int ret = curl_multi_fdset(handle, &fdread, &fdwrite, &fdexcep, &maxfd); if (ret) { - dout(0) << "ERROR: curl_multi_fdset returned " << ret << dendl; + generic_dout(0) << "ERROR: curl_multi_fdset returned " << ret << dendl; return -EIO; } + if (signal_fd >= maxfd) { + maxfd = signal_fd + 1; + } + /* forcing a strict timeout, as the returned fdsets might not reference all fds we wait on */ uint64_t to = cct->_conf->rgw_curl_wait_timeout_ms; #define RGW_CURL_TIMEOUT 1000 @@ -315,11 +319,20 @@ static int do_curl_wait(CephContext *cct, CURLM *handle) return ret; } + if (signal_fd > 0 && FD_ISSET(signal_fd, &fdread)) { + uint32_t buf; + ret = read(signal_fd, (void *)&buf, sizeof(buf)); + if (ret < 0) { + ret = -errno; + dout(0) << "ERROR: " << __func__ << "(): read() returned " << ret << dendl; + return ret; + } + } + return 0; } #endif -#warning need to fix do_curl_wait() in second case void *RGWHTTPManager::ReqsThread::entry() {