Commit e5896809 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Really (I swear) implement the waitpipe in net_write

parent 55153f42
...@@ -284,7 +284,7 @@ __net_Read (vlc_object_t *restrict p_this, int fd, const v_socket_t *vs, ...@@ -284,7 +284,7 @@ __net_Read (vlc_object_t *restrict p_this, int fd, const v_socket_t *vs,
if (poll (ufd, sizeof (ufd) / sizeof (ufd[0]), -1) < 0) if (poll (ufd, sizeof (ufd) / sizeof (ufd[0]), -1) < 0)
{ {
if (errno =! EINTR) if (errno != EINTR)
goto error; goto error;
continue; continue;
} }
...@@ -306,6 +306,7 @@ __net_Read (vlc_object_t *restrict p_this, int fd, const v_socket_t *vs, ...@@ -306,6 +306,7 @@ __net_Read (vlc_object_t *restrict p_this, int fd, const v_socket_t *vs,
{ {
if (ufd[1].revents) if (ufd[1].revents)
{ {
assert (p_this->b_die);
msg_Dbg (p_this, "socket %d polling interrupted", fd); msg_Dbg (p_this, "socket %d polling interrupted", fd);
#if defined(WIN32) || defined(UNDER_CE) #if defined(WIN32) || defined(UNDER_CE)
WSASetLastError (WSAEINTR); WSASetLastError (WSAEINTR);
...@@ -411,7 +412,7 @@ ssize_t __net_Write( vlc_object_t *p_this, int fd, const v_socket_t *p_vs, ...@@ -411,7 +412,7 @@ ssize_t __net_Write( vlc_object_t *p_this, int fd, const v_socket_t *p_vs,
if (errno != EINTR) if (errno != EINTR)
{ {
msg_Err (p_this, "Write error: %m"); msg_Err (p_this, "Write error: %m");
goto out; goto error;
} }
continue; continue;
} }
...@@ -424,6 +425,15 @@ ssize_t __net_Write( vlc_object_t *p_this, int fd, const v_socket_t *p_vs, ...@@ -424,6 +425,15 @@ ssize_t __net_Write( vlc_object_t *p_this, int fd, const v_socket_t *p_vs,
if (ufd[1].revents) if (ufd[1].revents)
break; break;
} }
else
{
if (ufd[1].revents)
{
assert (p_this->b_die);
errno = EINTR;
goto error;
}
}
if (p_vs != NULL) if (p_vs != NULL)
val = p_vs->pf_send (p_vs->p_sys, p_data, i_data); val = p_vs->pf_send (p_vs->p_sys, p_data, i_data);
...@@ -445,10 +455,10 @@ ssize_t __net_Write( vlc_object_t *p_this, int fd, const v_socket_t *p_vs, ...@@ -445,10 +455,10 @@ ssize_t __net_Write( vlc_object_t *p_this, int fd, const v_socket_t *p_vs,
i_total += val; i_total += val;
} }
out:
if ((i_total > 0) || (i_data == 0)) if ((i_total > 0) || (i_data == 0))
return i_total; return i_total;
error:
return -1; return -1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment