Skip to content

Commit

Permalink
fix connecting sock to finalize before reporting write enabled
Browse files Browse the repository at this point in the history
  • Loading branch information
manojampalam committed Mar 20, 2016
1 parent bf74d01 commit f33bb99
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 8 deletions.
24 changes: 17 additions & 7 deletions contrib/win32/win32compat/w32fd.c
Original file line number Diff line number Diff line change
Expand Up @@ -653,10 +653,6 @@ w32_select(int fds, w32_fd_set* readfds, w32_fd_set* writefds, w32_fd_set* excep
if (writefds && FD_ISSET(i, writefds)) {
in_set_fds++;
if (w32_io_is_io_available(fd_table.w32_ios[i], FALSE)) {
/* for connect() completed sockets finish WSA connect process*/
if ((fd_table.w32_ios[i]->type == SOCK_FD)
&& ((fd_table.w32_ios[i]->internal.state == SOCK_CONNECTING)))
socketio_finish_connect(fd_table.w32_ios[i]);
FD_SET(i, &write_ready_fds);
out_ready_fds++;
}
Expand All @@ -676,9 +672,23 @@ w32_select(int fds, w32_fd_set* readfds, w32_fd_set* writefds, w32_fd_set* excep

if (writefds)
for (i = 0; i < fds; i++)
if (FD_ISSET(i, writefds) && (!FD_ISSET(i, &write_ready_fds)))
FD_CLR(i, writefds);

if (FD_ISSET(i, writefds)) {
if (FD_ISSET(i, &write_ready_fds)) {
/* for connect() completed sockets finish WSA connect process*/
if ((fd_table.w32_ios[i]->type == SOCK_FD)
&& ((fd_table.w32_ios[i]->internal.state == SOCK_CONNECTING)))
if (socketio_finish_connect(fd_table.w32_ios[i]) != 0) {
/* finalizeing connect failed - recored error */
/* error gets picked up later recv and/or send*/
fd_table.w32_ios[i]->read_details.error = errno;
fd_table.w32_ios[i]->write_details.error = errno;
fd_table.w32_ios[i]->internal.state = SOCK_CONNECTED;
errno = 0;
}
}
else
FD_CLR(i, writefds);
}

debug3("select - returning %d", out_ready_fds);
return out_ready_fds;
Expand Down
2 changes: 1 addition & 1 deletion serverloop.c
Original file line number Diff line number Diff line change
Expand Up @@ -868,7 +868,7 @@ collect_children(void)
{
s = session_get(&i);

if (s != NULL)
if ((s != NULL) && (s->pid != 0))
{
if (WaitForSingleObject(s -> pid, 0) == 0)
{
Expand Down

0 comments on commit f33bb99

Please sign in to comment.