* select.cc (start_thread_socket): Delay setting thread local exitsock until we

know it's correct.  Return correct value on error.
This commit is contained in:
Christopher Faylor 2006-05-24 03:39:29 +00:00
parent 9905786a04
commit 12a7d844b9
4 changed files with 4853 additions and 1564 deletions

View File

@ -1,3 +1,8 @@
2006-05-23 Christopher Faylor <cgf@timesys.com>
* select.cc (start_thread_socket): Delay setting thread local exitsock
until we know it's correct. Return correct value on error.
2006-05-23 Lev Bishop <lev.bishop+cygwin@gmail.com>
Christopher Faylor <cgf@timesys.com>

6349
winsup/cygwin/configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -9,63 +9,12 @@ dnl details.
dnl
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.12)dnl
AC_PREREQ(2.59)dnl
AC_INIT(init.cc)
AC_CONFIG_HEADER(config.h)
INSTALL="/bin/sh "`cd $srcdir/../..; echo $(pwd)/install-sh -c`
AC_CONFIG_AUX_DIR(../..)
AC_PROG_INSTALL
dnl FIXME: We temporarily define our own version of AC_PROG_CC. This is
dnl copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We
dnl are probably using a cross compiler, which will not be able to fully
dnl link an executable. This should really be fixed in autoconf
dnl itself.
AC_DEFUN(LIB_AC_PROG_CC,
[AC_BEFORE([$0], [AC_PROG_CPP])dnl
AC_CHECK_TOOL(CC, gcc, gcc)
if test -z "$CC"; then
AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
fi
AC_PROG_CC_GNU
if test $ac_cv_prog_gcc = yes; then
GCC=yes
dnl Check whether -g works, even if CFLAGS is set, in case the package
dnl plays around with CFLAGS (such as to build both debugging and
dnl normal versions of a library), tasteless as that idea is.
ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
AC_PROG_CC_G
if test "$ac_test_CFLAGS" = set; then
CFLAGS="$ac_save_CFLAGS"
elif test $ac_cv_prog_cc_g = yes; then
CFLAGS="-gstabs+ -O2"
else
CFLAGS="-O2"
fi
else
GCC=
test "${CFLAGS+set}" = set || CFLAGS="-g"
fi
])
AC_DEFUN(LIB_AC_PROG_CXX,
[AC_BEFORE([$0], [AC_PROG_CPP])dnl
AC_CHECK_TOOL(CXX, g++, g++)
if test -z "$CXX"; then
AC_CHECK_PROG(CXX, c++, c++, , , )
test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
fi
CXXFLAGS='$(CFLAGS)'
])
AC_CANONICAL_SYSTEM
LIB_AC_PROG_CC

View File

@ -1405,12 +1405,12 @@ start_thread_socket (select_record *me, select_stuff *stuff)
si->exitsock = _my_tls.locals.exitsock;
else
{
si->exitsock = _my_tls.locals.exitsock = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
si->exitsock = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (si->exitsock == INVALID_SOCKET)
{
set_winsock_errno ();
select_printf ("cannot create socket, %E");
return -1;
return 0;
}
int sin_len = sizeof (_my_tls.locals.exitsock_sin);
memset (&_my_tls.locals.exitsock_sin, 0, sin_len);
@ -1432,6 +1432,7 @@ start_thread_socket (select_record *me, select_stuff *stuff)
/* else
too bad? */
select_printf ("opened new socket %p", si->exitsock);
_my_tls.locals.exitsock = si->exitsock;
}
select_printf ("exitsock %p", si->exitsock);
@ -1446,8 +1447,7 @@ start_thread_socket (select_record *me, select_stuff *stuff)
err:
set_winsock_errno ();
closesocket (si->exitsock);
si->exitsock = INVALID_SOCKET;
return -1;
return 0;
}
void