* cygtls.h (exitsock): New element.
(exitsock_sin): Ditto. * cygtls.cc (_cygtls::init_thread): Initialize exitsock to invalid handle. (_cygtls::call2): Close exitsock if it is valid. * select.cc (struct socketinf): Remove sin element. (start_thread_socket): Initialize one SOCK_DGRAM socket per thread instead of (apparently) expensive opening and closing of socket with each select call. (socket_cleanup): Send a byte to the exitsock socket as a way to potentially signal a waiting-for-socket thread to exit. * tlsoffsets.h: Regenerate.
This commit is contained in:
parent
8d712c8c3e
commit
1cda132258
@ -1,9 +1,23 @@
|
|||||||
|
2004-10-10 Christopher Faylor <cgf@timesys.com>
|
||||||
|
|
||||||
|
* cygtls.h (exitsock): New element.
|
||||||
|
(exitsock_sin): Ditto.
|
||||||
|
* cygtls.cc (_cygtls::init_thread): Initialize exitsock to invalid handle.
|
||||||
|
(_cygtls::call2): Close exitsock if it is valid.
|
||||||
|
* select.cc (struct socketinf): Remove sin element.
|
||||||
|
(start_thread_socket): Initialize one SOCK_DGRAM socket per thread
|
||||||
|
instead of (apparently) expensive opening and closing of socket with
|
||||||
|
each select call.
|
||||||
|
(socket_cleanup): Send a byte to the exitsock socket as a way to
|
||||||
|
potentially signal a waiting-for-socket thread to exit.
|
||||||
|
* tlsoffsets.h: Regenerate.
|
||||||
|
|
||||||
2004-10-07 Corinna Vinschen <corinna@vinschen.de>
|
2004-10-07 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* cygheap.h (class cygheap_user): Add psystemroot member and
|
* cygheap.h (class cygheap_user): Add psystemroot member and
|
||||||
env_systemroot method.
|
env_systemroot method.
|
||||||
* environ.cc (struct spenv): Add add_always member.
|
* environ.cc (struct spenv): Add add_always member.
|
||||||
(spenvs): Accomodate new add_always member. Add
|
(spenvs): Accommodate new add_always member. Add
|
||||||
cygheap_user::env_systemroot method to SYSTEMROOT entry.
|
cygheap_user::env_systemroot method to SYSTEMROOT entry.
|
||||||
(build_env): Check add_always member when adding missing environment
|
(build_env): Check add_always member when adding missing environment
|
||||||
variables from spenvs.
|
variables from spenvs.
|
||||||
@ -46,7 +60,7 @@
|
|||||||
(path_conv::isdisk): Delete method.
|
(path_conv::isdisk): Delete method.
|
||||||
(path_conv::set_isdisk): Ditto.
|
(path_conv::set_isdisk): Ditto.
|
||||||
* path.cc (path_conv::check): Do not call set_isdisk.
|
* path.cc (path_conv::check): Do not call set_isdisk.
|
||||||
* uinfo.cc(pwdgrp::load): Do not call pc.isdisk.
|
* uinfo.cc(pwdgrp::load): Do not call pc.isdisk.
|
||||||
|
|
||||||
2004-09-28 Christopher Faylor <cgf@timesys.com>
|
2004-09-28 Christopher Faylor <cgf@timesys.com>
|
||||||
|
|
||||||
@ -1029,7 +1043,7 @@
|
|||||||
|
|
||||||
* fhandler_tape.cc (mtinfo_drive::_set_pos): Take additional dont_wait
|
* fhandler_tape.cc (mtinfo_drive::_set_pos): Take additional dont_wait
|
||||||
parameter. Use in call to SetTapePosition.
|
parameter. Use in call to SetTapePosition.
|
||||||
(mtinfo_drive::set_pos): Accomodate _set_pos calls to above change.
|
(mtinfo_drive::set_pos): Accommodate _set_pos calls to above change.
|
||||||
(mtinfo_drive::set_partition): Ditto.
|
(mtinfo_drive::set_partition): Ditto.
|
||||||
* mtinfo.h (mtinfo_drive::_set_pos): Change declaration accordingly.
|
* mtinfo.h (mtinfo_drive::_set_pos): Change declaration accordingly.
|
||||||
|
|
||||||
@ -1119,7 +1133,7 @@
|
|||||||
|
|
||||||
2004-04-14 Corinna Vinschen <corinna@vinschen.de>
|
2004-04-14 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* fhandler.cc (fhandler_base::open): Accomodate query_write_control
|
* fhandler.cc (fhandler_base::open): Accommodate query_write_control
|
||||||
query_state.
|
query_state.
|
||||||
(fhandler_base::fchown): New method.
|
(fhandler_base::fchown): New method.
|
||||||
* fhandler.h: Declare fchown method in fhandler_base,
|
* fhandler.h: Declare fchown method in fhandler_base,
|
||||||
@ -1305,7 +1319,7 @@
|
|||||||
(fhandler_disk_file::readdir): Use pc.isencoded() directly.
|
(fhandler_disk_file::readdir): Use pc.isencoded() directly.
|
||||||
* mtinfo.h (class mtinfo_drive): Const'ify all read accessor methods.
|
* mtinfo.h (class mtinfo_drive): Const'ify all read accessor methods.
|
||||||
* path.cc (fsinfo_cnt): Add.
|
* path.cc (fsinfo_cnt): Add.
|
||||||
(fs_info::update): Accomodate class changes. Evaluate file system
|
(fs_info::update): Accommodate class changes. Evaluate file system
|
||||||
name specific flags right here. Add thread safety for reading and
|
name specific flags right here. Add thread safety for reading and
|
||||||
writing global fsinfo array.
|
writing global fsinfo array.
|
||||||
* path.h (enum path_types): Drop values for flags kept in fs already.
|
* path.h (enum path_types): Drop values for flags kept in fs already.
|
||||||
@ -1394,7 +1408,7 @@
|
|||||||
(fhandler_base::open_status): Ditto.
|
(fhandler_base::open_status): Ditto.
|
||||||
(class fhandler_socket): Move status bits into private bitfield struct
|
(class fhandler_socket): Move status bits into private bitfield struct
|
||||||
type status_flags. Change accessor methods appropriately.
|
type status_flags. Change accessor methods appropriately.
|
||||||
* fhandler_socket.cc (fhandler_socket::fhandler_socket): Accomodate
|
* fhandler_socket.cc (fhandler_socket::fhandler_socket): Accommodate
|
||||||
above status bit changes.
|
above status bit changes.
|
||||||
* tty.h: Remove status bit enumerator.
|
* tty.h: Remove status bit enumerator.
|
||||||
(TTYISSETF): Remove.
|
(TTYISSETF): Remove.
|
||||||
@ -1414,7 +1428,7 @@
|
|||||||
|
|
||||||
* fhandler.cc (fhandler_base::write): Use bool parameter in calls to
|
* fhandler.cc (fhandler_base::write): Use bool parameter in calls to
|
||||||
set_did_lseek.
|
set_did_lseek.
|
||||||
(fhandler_base::fhandler_base): Accomodate new status and open_status
|
(fhandler_base::fhandler_base): Accommodate new status and open_status
|
||||||
constructor.
|
constructor.
|
||||||
* fhandler.h: Remove status bit enumerator.
|
* fhandler.h: Remove status bit enumerator.
|
||||||
(FHDEVN): Remove.
|
(FHDEVN): Remove.
|
||||||
@ -1426,10 +1440,10 @@
|
|||||||
(UNCONNECTED, CONNECT_PENDING, CONNECTED): Substitute by enum
|
(UNCONNECTED, CONNECT_PENDING, CONNECTED): Substitute by enum
|
||||||
connect_state.
|
connect_state.
|
||||||
(fhandler_base::status): Define as bitfield struct type status_flags.
|
(fhandler_base::status): Define as bitfield struct type status_flags.
|
||||||
Remove unused flags entirely. Accomodate all status access methods.
|
Remove unused flags entirely. Accommodate all status access methods.
|
||||||
(open_status): Define as bitfield struct type status_flags.
|
(open_status): Define as bitfield struct type status_flags.
|
||||||
(fhandler_socket): Move socket related status bits to here. Redefine
|
(fhandler_socket): Move socket related status bits to here. Redefine
|
||||||
had_connect_or_listen to be part of these status bits. Accomodate
|
had_connect_or_listen to be part of these status bits. Accommodate
|
||||||
related access methods.
|
related access methods.
|
||||||
* fhandler_disk_file.cc (fhandler_base::fstat_helper): Use pc.issymlink
|
* fhandler_disk_file.cc (fhandler_base::fstat_helper): Use pc.issymlink
|
||||||
instead of dropped method get_symlink_p.
|
instead of dropped method get_symlink_p.
|
||||||
@ -1476,7 +1490,7 @@
|
|||||||
to allow calling get_nt_object_attribute in case a non-NULL handle
|
to allow calling get_nt_object_attribute in case a non-NULL handle
|
||||||
is given.
|
is given.
|
||||||
* security.h (get_file_attribute): Add handle to argument list.
|
* security.h (get_file_attribute): Add handle to argument list.
|
||||||
* syscalls.cc (chown_worker): Accomodate new definition of
|
* syscalls.cc (chown_worker): Accommodate new definition of
|
||||||
get_file_attribute.
|
get_file_attribute.
|
||||||
|
|
||||||
2004-04-07 Pierre Humblet <pierre.humblet@ieee.org>
|
2004-04-07 Pierre Humblet <pierre.humblet@ieee.org>
|
||||||
@ -1624,7 +1638,7 @@
|
|||||||
* net.cc (wsock_event::prepare): Reimplement using asynchronous I/O.
|
* net.cc (wsock_event::prepare): Reimplement using asynchronous I/O.
|
||||||
(wsock_event::wait): Ditto.
|
(wsock_event::wait): Ditto.
|
||||||
(wsock_event::release): New method.
|
(wsock_event::release): New method.
|
||||||
* wsock_event.h (class wsock_event): Remove ovr member. Accomodate
|
* wsock_event.h (class wsock_event): Remove ovr member. Accommodate
|
||||||
new implementation of prepare and wait methods. Add release method.
|
new implementation of prepare and wait methods. Add release method.
|
||||||
|
|
||||||
2004-03-29 Thomas Pfaff <tpfaff@gmx.net>
|
2004-03-29 Thomas Pfaff <tpfaff@gmx.net>
|
||||||
@ -1926,7 +1940,7 @@
|
|||||||
Handle ERROR_FILEMARK_DETECTED.
|
Handle ERROR_FILEMARK_DETECTED.
|
||||||
* fhandler_tape.cc (TAPE_FUNC): Add comment that ERROR_BUS_RESET
|
* fhandler_tape.cc (TAPE_FUNC): Add comment that ERROR_BUS_RESET
|
||||||
has still to be handled correctly.
|
has still to be handled correctly.
|
||||||
(fhandler_dev_tape::open): Accomodate fact that get.mt_dsreg
|
(fhandler_dev_tape::open): Accommodate fact that get.mt_dsreg
|
||||||
also contains density code.
|
also contains density code.
|
||||||
(fhandler_dev_tape::ioctl): Rearrange slightly. Reset devbuf also on
|
(fhandler_dev_tape::ioctl): Rearrange slightly. Reset devbuf also on
|
||||||
MTNOP, MTWSM, MTSETBLK, MTSETDRVBUFFER, MTSETPART and MTMKPART.
|
MTNOP, MTWSM, MTSETBLK, MTSETDRVBUFFER, MTSETPART and MTMKPART.
|
||||||
@ -1975,12 +1989,12 @@
|
|||||||
* fhandler_raw.cc (fhandler_dev_raw::write_file): New method, created
|
* fhandler_raw.cc (fhandler_dev_raw::write_file): New method, created
|
||||||
from former static function.
|
from former static function.
|
||||||
(fhandler_dev_raw::read_file): Ditto.
|
(fhandler_dev_raw::read_file): Ditto.
|
||||||
(fhandler_dev_raw::writebuf): Accomodate the fact that no devbuf
|
(fhandler_dev_raw::writebuf): Accommodate the fact that no devbuf
|
||||||
exists under variable block size condition.
|
exists under variable block size condition.
|
||||||
(fhandler_dev_raw::raw_read): Ditto. Add local p pointer to simplify
|
(fhandler_dev_raw::raw_read): Ditto. Add local p pointer to simplify
|
||||||
pointer arithmetic.
|
pointer arithmetic.
|
||||||
(fhandler_dev_raw::raw_write): Always set devbufend to 0 when starting
|
(fhandler_dev_raw::raw_write): Always set devbufend to 0 when starting
|
||||||
with writing. Accomodate the fact that no devbuf exists under
|
with writing. Accommodate the fact that no devbuf exists under
|
||||||
variable block size condition.
|
variable block size condition.
|
||||||
* fhandler_tape.cc: Various formatting changes.
|
* fhandler_tape.cc: Various formatting changes.
|
||||||
(TAPE_FUNC): New macro. Use throughout as tape function loop.
|
(TAPE_FUNC): New macro. Use throughout as tape function loop.
|
||||||
@ -2014,7 +2028,7 @@
|
|||||||
(fhandler_dev_tape::tape_set_blocksize): Don't call tape_get_blocksize.
|
(fhandler_dev_tape::tape_set_blocksize): Don't call tape_get_blocksize.
|
||||||
Error handling already done in fhandler_dev_tape::ioctl.
|
Error handling already done in fhandler_dev_tape::ioctl.
|
||||||
(fhandler_dev_tape::tape_status): Remove local `dp' variable.
|
(fhandler_dev_tape::tape_status): Remove local `dp' variable.
|
||||||
Accomodate logical tape reporting. Call tape_get_feature instead
|
Accommodate logical tape reporting. Call tape_get_feature instead
|
||||||
of accessing feature words directly.
|
of accessing feature words directly.
|
||||||
(fhandler_dev_tape::tape_compression): Use dp instead of calling
|
(fhandler_dev_tape::tape_compression): Use dp instead of calling
|
||||||
GetTapeParameters. Fix resetting datcompression.
|
GetTapeParameters. Fix resetting datcompression.
|
||||||
@ -2244,7 +2258,7 @@
|
|||||||
* thread.cc (pthread::cancelable_wait): Rearrange slightly.
|
* thread.cc (pthread::cancelable_wait): Rearrange slightly.
|
||||||
Add do_sig_wait parameter. Wait for signal_arrived if set to true.
|
Add do_sig_wait parameter. Wait for signal_arrived if set to true.
|
||||||
Return WAIT_SIGNALED if signal arrived.
|
Return WAIT_SIGNALED if signal arrived.
|
||||||
(pthread_cond::wait): Accomodate change to pthread::cancelable_wait.
|
(pthread_cond::wait): Accommodate change to pthread::cancelable_wait.
|
||||||
(pthread::join): Ditto.
|
(pthread::join): Ditto.
|
||||||
(semaphore::_timedwait): Ditto.
|
(semaphore::_timedwait): Ditto.
|
||||||
(semaphore::_wait): Ditto. Change to return int to allow status
|
(semaphore::_wait): Ditto. Change to return int to allow status
|
||||||
|
@ -92,6 +92,10 @@ _cygtls::call2 (DWORD (*func) (void *, void *), void *arg, void *buf)
|
|||||||
_my_tls.init_thread (buf, func);
|
_my_tls.init_thread (buf, func);
|
||||||
DWORD res = func (arg, buf);
|
DWORD res = func (arg, buf);
|
||||||
_my_tls.remove (INFINITE);
|
_my_tls.remove (INFINITE);
|
||||||
|
// FIXME: Need some sort of atthreadexit function to allow things like
|
||||||
|
// select to control this themselves
|
||||||
|
if (_my_tls.locals.exitsock != INVALID_SOCKET)
|
||||||
|
closesocket (_my_tls.locals.exitsock);
|
||||||
ExitThread (res);
|
ExitThread (res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,6 +118,7 @@ _cygtls::init_thread (void *x, DWORD (*func) (void *, void *))
|
|||||||
}
|
}
|
||||||
local_clib._current_locale = "C";
|
local_clib._current_locale = "C";
|
||||||
locals.process_logmask = LOG_UPTO (LOG_DEBUG);
|
locals.process_logmask = LOG_UPTO (LOG_DEBUG);
|
||||||
|
locals.exitsock = INVALID_SOCKET;
|
||||||
}
|
}
|
||||||
|
|
||||||
set_state (false);
|
set_state (false);
|
||||||
|
@ -16,6 +16,8 @@ details. */
|
|||||||
#define _NOMNTENT_FUNCS
|
#define _NOMNTENT_FUNCS
|
||||||
#include <mntent.h>
|
#include <mntent.h>
|
||||||
#undef _NOMNTENT_FUNCS
|
#undef _NOMNTENT_FUNCS
|
||||||
|
#define USE_SYS_TYPES_FD_SET
|
||||||
|
#include <winsock.h>
|
||||||
|
|
||||||
#define CYGTLS_INITIALIZED 0x43227
|
#define CYGTLS_INITIALIZED 0x43227
|
||||||
#define CYGTLS_EXCEPTION (0x43227 + true)
|
#define CYGTLS_EXCEPTION (0x43227 + true)
|
||||||
@ -61,6 +63,10 @@ struct _local_storage
|
|||||||
char mnt_fsname[CYG_MAX_PATH];
|
char mnt_fsname[CYG_MAX_PATH];
|
||||||
char mnt_dir[CYG_MAX_PATH];
|
char mnt_dir[CYG_MAX_PATH];
|
||||||
|
|
||||||
|
/* select.cc */
|
||||||
|
SOCKET exitsock;
|
||||||
|
struct sockaddr_in exitsock_sin;
|
||||||
|
|
||||||
/* strerror */
|
/* strerror */
|
||||||
char strerror_buf[20];
|
char strerror_buf[20];
|
||||||
|
|
||||||
|
@ -11,11 +11,8 @@ This software is a copyrighted work licensed under the terms of the
|
|||||||
Cygwin license. Please consult the file "CYGWIN_LICENSE" for
|
Cygwin license. Please consult the file "CYGWIN_LICENSE" for
|
||||||
details. */
|
details. */
|
||||||
|
|
||||||
/*
|
/* The following line means that the BSD socket definitions for
|
||||||
* The following line means that the BSD socket
|
fd_set, FD_ISSET etc. are used in this file. */
|
||||||
* definitions for fd_set, FD_ISSET etc. are used in this
|
|
||||||
* file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define __INSIDE_CYGWIN_NET__
|
#define __INSIDE_CYGWIN_NET__
|
||||||
|
|
||||||
@ -43,6 +40,8 @@ details. */
|
|||||||
#include "tty.h"
|
#include "tty.h"
|
||||||
#include "cygthread.h"
|
#include "cygthread.h"
|
||||||
#include "ntdll.h"
|
#include "ntdll.h"
|
||||||
|
#include "cygtls.h"
|
||||||
|
#include <asm/byteorder.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* All these defines below should be in sys/types.h
|
* All these defines below should be in sys/types.h
|
||||||
@ -1211,7 +1210,6 @@ struct socketinf
|
|||||||
cygthread *thread;
|
cygthread *thread;
|
||||||
winsock_fd_set readfds, writefds, exceptfds;
|
winsock_fd_set readfds, writefds, exceptfds;
|
||||||
SOCKET exitsock;
|
SOCKET exitsock;
|
||||||
struct sockaddr_in sin;
|
|
||||||
select_record *start;
|
select_record *start;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1306,12 +1304,9 @@ thread_socket (void *arg)
|
|||||||
|
|
||||||
if (WINSOCK_FD_ISSET (si->exitsock, &si->readfds))
|
if (WINSOCK_FD_ISSET (si->exitsock, &si->readfds))
|
||||||
select_printf ("saw exitsock read");
|
select_printf ("saw exitsock read");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" unsigned long htonl (unsigned long);
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
start_thread_socket (select_record *me, select_stuff *stuff)
|
start_thread_socket (select_record *me, select_stuff *stuff)
|
||||||
{
|
{
|
||||||
@ -1350,36 +1345,43 @@ start_thread_socket (select_record *me, select_stuff *stuff)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((si->exitsock = socket (PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
|
if (_my_tls.locals.exitsock != INVALID_SOCKET)
|
||||||
{
|
{
|
||||||
set_winsock_errno ();
|
char buf[1];
|
||||||
select_printf ("cannot create socket, %E");
|
si->exitsock = _my_tls.locals.exitsock;
|
||||||
return -1;
|
select_printf ("read a byte from %p", si->exitsock);
|
||||||
|
recv (si->exitsock, buf, 1, 0);
|
||||||
}
|
}
|
||||||
/* Allow rapid reuse of the port. */
|
else
|
||||||
int tmp = 1;
|
|
||||||
(void) setsockopt (si->exitsock, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp, sizeof (tmp));
|
|
||||||
|
|
||||||
int sin_len = sizeof (si->sin);
|
|
||||||
memset (&si->sin, 0, sizeof (si->sin));
|
|
||||||
si->sin.sin_family = AF_INET;
|
|
||||||
si->sin.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
|
|
||||||
if (bind (si->exitsock, (struct sockaddr *) &si->sin, sizeof (si->sin)) < 0)
|
|
||||||
{
|
{
|
||||||
select_printf ("cannot bind socket, %E");
|
si->exitsock = _my_tls.locals.exitsock = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
|
||||||
goto err;
|
if (_my_tls.locals.exitsock == INVALID_SOCKET)
|
||||||
}
|
{
|
||||||
|
set_winsock_errno ();
|
||||||
|
select_printf ("cannot create socket, %E");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
#if 0
|
||||||
|
/* Allow rapid reuse of the port. */
|
||||||
|
int tmp = 1;
|
||||||
|
(void) setsockopt (si->exitsock, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp, sizeof (tmp));
|
||||||
|
#endif
|
||||||
|
|
||||||
if (getsockname (si->exitsock, (struct sockaddr *) &si->sin, &sin_len) < 0)
|
int sin_len = sizeof (_my_tls.locals.exitsock_sin);
|
||||||
{
|
memset (&_my_tls.locals.exitsock_sin, 0, sin_len);
|
||||||
select_printf ("getsockname error");
|
_my_tls.locals.exitsock_sin.sin_family = AF_INET;
|
||||||
goto err;
|
_my_tls.locals.exitsock_sin.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
|
||||||
}
|
if (bind (si->exitsock, (struct sockaddr *) &_my_tls.locals.exitsock_sin, sin_len) < 0)
|
||||||
|
{
|
||||||
|
select_printf ("cannot bind socket %p, %E", si->exitsock);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
if (listen (si->exitsock, 1))
|
if (getsockname (si->exitsock, (struct sockaddr *) &_my_tls.locals.exitsock_sin, &sin_len) < 0)
|
||||||
{
|
{
|
||||||
select_printf ("listen failed, %E");
|
select_printf ("getsockname error");
|
||||||
goto err;
|
goto err;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
select_printf ("exitsock %p", si->exitsock);
|
select_printf ("exitsock %p", si->exitsock);
|
||||||
@ -1405,30 +1407,13 @@ socket_cleanup (select_record *, select_stuff *stuff)
|
|||||||
select_printf ("si %p si->thread %p", si, si ? si->thread : NULL);
|
select_printf ("si %p si->thread %p", si, si ? si->thread : NULL);
|
||||||
if (si && si->thread)
|
if (si && si->thread)
|
||||||
{
|
{
|
||||||
select_printf ("connection to si->exitsock %p", si->exitsock);
|
char buf[] = "";
|
||||||
SOCKET s = socket (AF_INET, SOCK_STREAM, 0);
|
int res = sendto (_my_tls.locals.exitsock, buf, 1, 0,
|
||||||
|
(sockaddr *) &_my_tls.locals.exitsock_sin,
|
||||||
/* Set LINGER with 0 timeout for hard close */
|
sizeof (_my_tls.locals.exitsock_sin));
|
||||||
struct linger tmp = {1, 0}; /* On, 0 delay */
|
select_printf ("sent a byte to the exit sock %p, res %d", _my_tls.locals.exitsock, res);
|
||||||
(void) setsockopt (s, SOL_SOCKET, SO_LINGER, (char *)&tmp, sizeof (tmp));
|
|
||||||
(void) setsockopt (si->exitsock, SOL_SOCKET, SO_LINGER, (char *)&tmp, sizeof (tmp));
|
|
||||||
|
|
||||||
/* Connecting to si->exitsock will cause any executing select to wake
|
|
||||||
up. When this happens then the exitsock condition will cause the
|
|
||||||
thread to terminate. */
|
|
||||||
if (connect (s, (struct sockaddr *) &si->sin, sizeof (si->sin)) < 0)
|
|
||||||
{
|
|
||||||
set_winsock_errno ();
|
|
||||||
select_printf ("connect failed");
|
|
||||||
/* FIXME: now what? */
|
|
||||||
}
|
|
||||||
shutdown (s, SD_BOTH);
|
|
||||||
closesocket (s);
|
|
||||||
|
|
||||||
/* Wait for thread to go away */
|
/* Wait for thread to go away */
|
||||||
si->thread->detach ();
|
si->thread->detach ();
|
||||||
shutdown (si->exitsock, SD_BOTH);
|
|
||||||
closesocket (si->exitsock);
|
|
||||||
stuff->device_specific_socket = NULL;
|
stuff->device_specific_socket = NULL;
|
||||||
delete si;
|
delete si;
|
||||||
}
|
}
|
||||||
|
@ -1,113 +1,113 @@
|
|||||||
//;# autogenerated: Do not edit.
|
//;# autogenerated: Do not edit.
|
||||||
|
|
||||||
//; $tls::sizeof__cygtls = 3912;
|
//; $tls::sizeof__cygtls = 3932;
|
||||||
//; $tls::func = -3912;
|
//; $tls::func = -3932;
|
||||||
//; $tls::pfunc = 0;
|
//; $tls::pfunc = 0;
|
||||||
//; $tls::saved_errno = -3908;
|
//; $tls::saved_errno = -3928;
|
||||||
//; $tls::psaved_errno = 4;
|
//; $tls::psaved_errno = 4;
|
||||||
//; $tls::sa_flags = -3904;
|
//; $tls::sa_flags = -3924;
|
||||||
//; $tls::psa_flags = 8;
|
//; $tls::psa_flags = 8;
|
||||||
//; $tls::oldmask = -3900;
|
//; $tls::oldmask = -3920;
|
||||||
//; $tls::poldmask = 12;
|
//; $tls::poldmask = 12;
|
||||||
//; $tls::deltamask = -3896;
|
//; $tls::deltamask = -3916;
|
||||||
//; $tls::pdeltamask = 16;
|
//; $tls::pdeltamask = 16;
|
||||||
//; $tls::event = -3892;
|
//; $tls::event = -3912;
|
||||||
//; $tls::pevent = 20;
|
//; $tls::pevent = 20;
|
||||||
//; $tls::errno_addr = -3888;
|
//; $tls::errno_addr = -3908;
|
||||||
//; $tls::perrno_addr = 24;
|
//; $tls::perrno_addr = 24;
|
||||||
//; $tls::initialized = -3884;
|
//; $tls::initialized = -3904;
|
||||||
//; $tls::pinitialized = 28;
|
//; $tls::pinitialized = 28;
|
||||||
//; $tls::sigmask = -3880;
|
//; $tls::sigmask = -3900;
|
||||||
//; $tls::psigmask = 32;
|
//; $tls::psigmask = 32;
|
||||||
//; $tls::sigwait_mask = -3876;
|
//; $tls::sigwait_mask = -3896;
|
||||||
//; $tls::psigwait_mask = 36;
|
//; $tls::psigwait_mask = 36;
|
||||||
//; $tls::sigwait_info = -3872;
|
//; $tls::sigwait_info = -3892;
|
||||||
//; $tls::psigwait_info = 40;
|
//; $tls::psigwait_info = 40;
|
||||||
//; $tls::threadkill = -3868;
|
//; $tls::threadkill = -3888;
|
||||||
//; $tls::pthreadkill = 44;
|
//; $tls::pthreadkill = 44;
|
||||||
//; $tls::infodata = -3864;
|
//; $tls::infodata = -3884;
|
||||||
//; $tls::pinfodata = 48;
|
//; $tls::pinfodata = 48;
|
||||||
//; $tls::tid = -3716;
|
//; $tls::tid = -3736;
|
||||||
//; $tls::ptid = 196;
|
//; $tls::ptid = 196;
|
||||||
//; $tls::local_clib = -3712;
|
//; $tls::local_clib = -3732;
|
||||||
//; $tls::plocal_clib = 200;
|
//; $tls::plocal_clib = 200;
|
||||||
//; $tls::__dontuse = -3712;
|
//; $tls::__dontuse = -3732;
|
||||||
//; $tls::p__dontuse = 200;
|
//; $tls::p__dontuse = 200;
|
||||||
//; $tls::locals = -2648;
|
//; $tls::locals = -2668;
|
||||||
//; $tls::plocals = 1264;
|
//; $tls::plocals = 1264;
|
||||||
//; $tls::wq = -1080;
|
//; $tls::wq = -1080;
|
||||||
//; $tls::pwq = 2832;
|
//; $tls::pwq = 2852;
|
||||||
//; $tls::prev = -1052;
|
//; $tls::prev = -1052;
|
||||||
//; $tls::pprev = 2860;
|
//; $tls::pprev = 2880;
|
||||||
//; $tls::next = -1048;
|
//; $tls::next = -1048;
|
||||||
//; $tls::pnext = 2864;
|
//; $tls::pnext = 2884;
|
||||||
//; $tls::stackptr = -1044;
|
//; $tls::stackptr = -1044;
|
||||||
//; $tls::pstackptr = 2868;
|
//; $tls::pstackptr = 2888;
|
||||||
//; $tls::sig = -1040;
|
//; $tls::sig = -1040;
|
||||||
//; $tls::psig = 2872;
|
//; $tls::psig = 2892;
|
||||||
//; $tls::incyg = -1036;
|
//; $tls::incyg = -1036;
|
||||||
//; $tls::pincyg = 2876;
|
//; $tls::pincyg = 2896;
|
||||||
//; $tls::spinning = -1032;
|
//; $tls::spinning = -1032;
|
||||||
//; $tls::pspinning = 2880;
|
//; $tls::pspinning = 2900;
|
||||||
//; $tls::stacklock = -1028;
|
//; $tls::stacklock = -1028;
|
||||||
//; $tls::pstacklock = 2884;
|
//; $tls::pstacklock = 2904;
|
||||||
//; $tls::stack = -1024;
|
//; $tls::stack = -1024;
|
||||||
//; $tls::pstack = 2888;
|
//; $tls::pstack = 2908;
|
||||||
//; $tls::padding = 0;
|
//; $tls::padding = 0;
|
||||||
//; $tls::ppadding = 3912;
|
//; $tls::ppadding = 3932;
|
||||||
//; __DATA__
|
//; __DATA__
|
||||||
|
|
||||||
#define tls_func (-3912)
|
#define tls_func (-3932)
|
||||||
#define tls_pfunc (0)
|
#define tls_pfunc (0)
|
||||||
#define tls_saved_errno (-3908)
|
#define tls_saved_errno (-3928)
|
||||||
#define tls_psaved_errno (4)
|
#define tls_psaved_errno (4)
|
||||||
#define tls_sa_flags (-3904)
|
#define tls_sa_flags (-3924)
|
||||||
#define tls_psa_flags (8)
|
#define tls_psa_flags (8)
|
||||||
#define tls_oldmask (-3900)
|
#define tls_oldmask (-3920)
|
||||||
#define tls_poldmask (12)
|
#define tls_poldmask (12)
|
||||||
#define tls_deltamask (-3896)
|
#define tls_deltamask (-3916)
|
||||||
#define tls_pdeltamask (16)
|
#define tls_pdeltamask (16)
|
||||||
#define tls_event (-3892)
|
#define tls_event (-3912)
|
||||||
#define tls_pevent (20)
|
#define tls_pevent (20)
|
||||||
#define tls_errno_addr (-3888)
|
#define tls_errno_addr (-3908)
|
||||||
#define tls_perrno_addr (24)
|
#define tls_perrno_addr (24)
|
||||||
#define tls_initialized (-3884)
|
#define tls_initialized (-3904)
|
||||||
#define tls_pinitialized (28)
|
#define tls_pinitialized (28)
|
||||||
#define tls_sigmask (-3880)
|
#define tls_sigmask (-3900)
|
||||||
#define tls_psigmask (32)
|
#define tls_psigmask (32)
|
||||||
#define tls_sigwait_mask (-3876)
|
#define tls_sigwait_mask (-3896)
|
||||||
#define tls_psigwait_mask (36)
|
#define tls_psigwait_mask (36)
|
||||||
#define tls_sigwait_info (-3872)
|
#define tls_sigwait_info (-3892)
|
||||||
#define tls_psigwait_info (40)
|
#define tls_psigwait_info (40)
|
||||||
#define tls_threadkill (-3868)
|
#define tls_threadkill (-3888)
|
||||||
#define tls_pthreadkill (44)
|
#define tls_pthreadkill (44)
|
||||||
#define tls_infodata (-3864)
|
#define tls_infodata (-3884)
|
||||||
#define tls_pinfodata (48)
|
#define tls_pinfodata (48)
|
||||||
#define tls_tid (-3716)
|
#define tls_tid (-3736)
|
||||||
#define tls_ptid (196)
|
#define tls_ptid (196)
|
||||||
#define tls_local_clib (-3712)
|
#define tls_local_clib (-3732)
|
||||||
#define tls_plocal_clib (200)
|
#define tls_plocal_clib (200)
|
||||||
#define tls___dontuse (-3712)
|
#define tls___dontuse (-3732)
|
||||||
#define tls_p__dontuse (200)
|
#define tls_p__dontuse (200)
|
||||||
#define tls_locals (-2648)
|
#define tls_locals (-2668)
|
||||||
#define tls_plocals (1264)
|
#define tls_plocals (1264)
|
||||||
#define tls_wq (-1080)
|
#define tls_wq (-1080)
|
||||||
#define tls_pwq (2832)
|
#define tls_pwq (2852)
|
||||||
#define tls_prev (-1052)
|
#define tls_prev (-1052)
|
||||||
#define tls_pprev (2860)
|
#define tls_pprev (2880)
|
||||||
#define tls_next (-1048)
|
#define tls_next (-1048)
|
||||||
#define tls_pnext (2864)
|
#define tls_pnext (2884)
|
||||||
#define tls_stackptr (-1044)
|
#define tls_stackptr (-1044)
|
||||||
#define tls_pstackptr (2868)
|
#define tls_pstackptr (2888)
|
||||||
#define tls_sig (-1040)
|
#define tls_sig (-1040)
|
||||||
#define tls_psig (2872)
|
#define tls_psig (2892)
|
||||||
#define tls_incyg (-1036)
|
#define tls_incyg (-1036)
|
||||||
#define tls_pincyg (2876)
|
#define tls_pincyg (2896)
|
||||||
#define tls_spinning (-1032)
|
#define tls_spinning (-1032)
|
||||||
#define tls_pspinning (2880)
|
#define tls_pspinning (2900)
|
||||||
#define tls_stacklock (-1028)
|
#define tls_stacklock (-1028)
|
||||||
#define tls_pstacklock (2884)
|
#define tls_pstacklock (2904)
|
||||||
#define tls_stack (-1024)
|
#define tls_stack (-1024)
|
||||||
#define tls_pstack (2888)
|
#define tls_pstack (2908)
|
||||||
#define tls_padding (0)
|
#define tls_padding (0)
|
||||||
#define tls_ppadding (3912)
|
#define tls_ppadding (3932)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user