135 lines
3.7 KiB
Plaintext
135 lines
3.7 KiB
Plaintext
---
|
|
libmilter/comm.c | 16 +++++++++++++---
|
|
libmilter/listener.c | 6 +++---
|
|
libsm/local.h | 5 ++++-
|
|
libsm/refill.c | 5 ++++-
|
|
sendmail/sfsasl.c | 6 ++++--
|
|
5 files changed, 28 insertions(+), 10 deletions(-)
|
|
|
|
--- libmilter/comm.c
|
|
+++ libmilter/comm.c 2020-07-28 06:16:36.425638839 +0000
|
|
@@ -78,8 +78,11 @@ mi_rd_cmd(sd, timeout, cmd, rlen, name)
|
|
i = 0;
|
|
for (;;)
|
|
{
|
|
+ struct timeval tv;
|
|
+ tv.tv_sec = timeout->tv_sec;
|
|
+ tv.tv_usec = timeout->tv_usec;
|
|
FD_RD_INIT(sd, rds, excs);
|
|
- ret = FD_RD_READY(sd, rds, excs, timeout);
|
|
+ ret = FD_RD_READY(sd, rds, excs, &tv);
|
|
if (ret == 0)
|
|
break;
|
|
else if (ret < 0)
|
|
@@ -151,8 +154,11 @@ mi_rd_cmd(sd, timeout, cmd, rlen, name)
|
|
i = 0;
|
|
for (;;)
|
|
{
|
|
+ struct timeval tv;
|
|
+ tv.tv_sec = timeout->tv_sec;
|
|
+ tv.tv_usec = timeout->tv_usec;
|
|
FD_RD_INIT(sd, rds, excs);
|
|
- ret = FD_RD_READY(sd, rds, excs, timeout);
|
|
+ ret = FD_RD_READY(sd, rds, excs, &tv);
|
|
if (ret == 0)
|
|
break;
|
|
else if (ret < 0)
|
|
@@ -251,6 +257,8 @@ retry_writev(fd, iov, iovcnt, timeout)
|
|
written = 0;
|
|
for (;;)
|
|
{
|
|
+ struct timeval tv;
|
|
+
|
|
while (iovcnt > 0 && iov[0].iov_len == 0)
|
|
{
|
|
iov++;
|
|
@@ -267,8 +275,10 @@ retry_writev(fd, iov, iovcnt, timeout)
|
|
** FD_SETSIZE is checked when socket is created.
|
|
*/
|
|
|
|
+ tv.tv_sec = timeout->tv_sec;
|
|
+ tv.tv_usec = timeout->tv_usec;
|
|
FD_WR_INIT(fd, wrs);
|
|
- i = FD_WR_READY(fd, wrs, timeout);
|
|
+ i = FD_WR_READY(fd, wrs, &tv);
|
|
if (i == 0)
|
|
return MI_FAILURE;
|
|
if (i < 0)
|
|
--- libmilter/listener.c
|
|
+++ libmilter/listener.c 2020-07-28 06:16:36.425638839 +0000
|
|
@@ -685,12 +685,12 @@ mi_closener()
|
|
int rs = 0; \
|
|
struct timeval st; \
|
|
\
|
|
- st.tv_sec = (s); \
|
|
- st.tv_usec = 0; \
|
|
- if (st.tv_sec > 0) \
|
|
+ if ((s) > 0) \
|
|
{ \
|
|
for (;;) \
|
|
{ \
|
|
+ st.tv_sec = (s); \
|
|
+ st.tv_usec = 0; \
|
|
rs = select(0, NULL, NULL, NULL, &st); \
|
|
if (rs < 0 && errno == EINTR) \
|
|
continue; \
|
|
--- libsm/local.h
|
|
+++ libsm/local.h 2020-07-28 06:16:36.453638343 +0000
|
|
@@ -258,8 +258,11 @@ int sm_flags __P((int));
|
|
return SM_IO_EOF; \
|
|
do \
|
|
{ \
|
|
+ struct timeval tv; \
|
|
+ tv.tv_sec = sm_io_to.tv_sec; \
|
|
+ tv.tv_usec = sm_io_to.tv_usec; \
|
|
sm_io_to_sel = select((fd) + 1, NULL, &sm_io_to_mask, \
|
|
- &sm_io_x_mask, &sm_io_to); \
|
|
+ &sm_io_x_mask, &tv); \
|
|
} while (sm_io_to_sel < 0 && errno == EINTR); \
|
|
if (sm_io_to_sel < 0) \
|
|
{ \
|
|
--- libsm/refill.c
|
|
+++ libsm/refill.c 2020-07-28 06:22:31.359355018 +0000
|
|
@@ -79,8 +79,11 @@ static int sm_lflush __P((SM_FILE_T *, i
|
|
return SM_IO_EOF; \
|
|
do \
|
|
{ \
|
|
+ struct timeval tv; \
|
|
+ tv.tv_sec = (to)->tv_sec; \
|
|
+ tv.tv_usec = (to)->tv_usec; \
|
|
(sel_ret) = select((fd) + 1, &sm_io_to_mask, NULL, \
|
|
- &sm_io_x_mask, (to)); \
|
|
+ &sm_io_x_mask, &tv); \
|
|
} while ((sel_ret) < 0 && errno == EINTR); \
|
|
if ((sel_ret) < 0) \
|
|
{ \
|
|
--- sendmail/sfsasl.c
|
|
+++ sendmail/sfsasl.c 2020-07-28 06:16:36.453638343 +0000
|
|
@@ -602,8 +602,6 @@ tls_retry(ssl, rfd, wfd, tlsstart, timeo
|
|
left = timeout - (now - tlsstart);
|
|
if (left <= 0)
|
|
return 0; /* timeout */
|
|
- tv.tv_sec = left;
|
|
- tv.tv_usec = 0;
|
|
|
|
if (LogLevel > 14)
|
|
{
|
|
@@ -635,6 +633,8 @@ tls_retry(ssl, rfd, wfd, tlsstart, timeo
|
|
FD_SET(rfd, &ssl_maskx);
|
|
do
|
|
{
|
|
+ tv.tv_sec = left;
|
|
+ tv.tv_usec = 0;
|
|
ret = select(rfd + 1, &ssl_maskr, NULL, &ssl_maskx,
|
|
&tv);
|
|
} while (ret < 0 && errno == EINTR);
|
|
@@ -653,6 +653,8 @@ tls_retry(ssl, rfd, wfd, tlsstart, timeo
|
|
FD_SET(rfd, &ssl_maskx);
|
|
do
|
|
{
|
|
+ tv.tv_sec = left;
|
|
+ tv.tv_usec = 0;
|
|
ret = select(wfd + 1, NULL, &ssl_maskw, &ssl_maskx,
|
|
&tv);
|
|
} while (ret < 0 && errno == EINTR);
|