Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2010-07-30 22:04:22 +0400
committerChristopher Faylor <me@cgf.cx>2010-07-30 22:04:22 +0400
commit4db1bd4040e1f12df5a4432ee228af9f5d2a084a (patch)
tree10e36b1da57d77e705b4fcbf0ff77bc7512150c9 /winsup/cygwin
parent5a7e00a86655de00cf65577e5d2e357c54e4ed37 (diff)
* cygthread.h (LPVOID_THREAD_START_ROUTINE): Define.
(cygthread::create): Rename from cygthread::cygthread. (cygthread::cygthread): Define new constructor which accepts LPVOID_THREAD_START_ROUTINE as the first argument. Call cygthread::create. * cygthread.cc (cygthread::create): Rename from cygthread::cygthread. Use 'arglen' rather than 'n' since 'n' is no longer supplied. * fhandler_tty.cc (process_input): Define as void/noreturn. (process_output): Ditto. (process_ioctl): Ditto. (fhandler_tty_master::init): Don't "zap_h" cygthreads which are noreturn. It's now implied.
Diffstat (limited to 'winsup/cygwin')
-rw-r--r--winsup/cygwin/ChangeLog15
-rw-r--r--winsup/cygwin/cygthread.cc7
-rw-r--r--winsup/cygwin/cygthread.h21
-rw-r--r--winsup/cygwin/fhandler_tty.cc27
4 files changed, 46 insertions, 24 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 993eba545..1f581a975 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,18 @@
+2010-07-28 Christopher Faylor <me+cygwin@cgf.cx>
+
+ * cygthread.h (LPVOID_THREAD_START_ROUTINE): Define.
+ (cygthread::create): Rename from cygthread::cygthread.
+ (cygthread::cygthread): Define new constructor which accepts
+ LPVOID_THREAD_START_ROUTINE as the first argument. Call
+ cygthread::create.
+ * cygthread.cc (cygthread::create): Rename from cygthread::cygthread.
+ Use 'arglen' rather than 'n' since 'n' is no longer supplied.
+ * fhandler_tty.cc (process_input): Define as void/noreturn.
+ (process_output): Ditto.
+ (process_ioctl): Ditto.
+ (fhandler_tty_master::init): Don't "zap_h" cygthreads which are
+ noreturn. It's now implied.
+
2010-07-23 Corinna Vinschen <corinna@vinschen.de>
* fhandler.cc (fhandler_base::raw_write): Remove STATUS_DISK_FULL
diff --git a/winsup/cygwin/cygthread.cc b/winsup/cygwin/cygthread.cc
index e747a2d87..7e8083ac8 100644
--- a/winsup/cygwin/cygthread.cc
+++ b/winsup/cygwin/cygthread.cc
@@ -185,9 +185,8 @@ out:
return info;
}
-cygthread::cygthread (LPTHREAD_START_ROUTINE start, size_t n, void *param,
- const char *name, HANDLE notify)
- : __name (name), func (start), arglen (n), arg (param), notify_detached (notify)
+void
+cygthread::create ()
{
thread_printf ("name %s, id %p", name, id);
HANDLE htobe;
@@ -214,7 +213,7 @@ cygthread::cygthread (LPTHREAD_START_ROUTINE start, size_t n, void *param,
#endif
}
- if (n)
+ if (arglen)
{
while (!ev)
yield ();
diff --git a/winsup/cygwin/cygthread.h b/winsup/cygwin/cygthread.h
index da7172e63..593cfdd0a 100644
--- a/winsup/cygwin/cygthread.h
+++ b/winsup/cygwin/cygthread.h
@@ -1,6 +1,7 @@
/* cygthread.h
- Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Red Hat, Inc.
+ Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2010
+ Red Hat, Inc.
This software is a copyrighted work licensed under the terms of the
Cygwin license. Please consult the file "CYGWIN_LICENSE" for
@@ -9,6 +10,8 @@ details. */
#ifndef _CYGTHREAD_H
#define _CYGTHREAD_H
+typedef void WINAPI (*LPVOID_THREAD_START_ROUTINE) (void *) __attribute__((noreturn)); // Input queue thread
+
class cygthread
{
LONG inuse;
@@ -28,6 +31,7 @@ class cygthread
bool is_freerange;
static bool exiting;
HANDLE notify_detached;
+ void create () __attribute__ ((regparm(1)));
public:
bool terminate_thread ();
static DWORD WINAPI stub (VOID *);
@@ -37,7 +41,20 @@ class cygthread
void callfunc (bool) __attribute__ ((noinline, regparm (2)));
void auto_release () {func = NULL;}
void release (bool);
- cygthread (LPTHREAD_START_ROUTINE, unsigned, LPVOID, const char *, HANDLE = NULL);
+ cygthread (LPTHREAD_START_ROUTINE start, unsigned n, LPVOID param, const char *name, HANDLE notify = NULL)
+ : __name (name), func (start), arglen (n), arg (param), notify_detached (notify)
+ {
+ create ();
+ }
+ cygthread (LPVOID_THREAD_START_ROUTINE start, unsigned n, LPVOID param, const char *name, HANDLE notify = NULL)
+ : __name (name), func ((LPTHREAD_START_ROUTINE) start), arglen (n),
+ arg (param), notify_detached (notify)
+ {
+ create ();
+ /* This is a neverending/high-priority thread */
+ ::SetThreadPriority (h, THREAD_PRIORITY_HIGHEST);
+ zap_h ();
+ }
cygthread () {};
static void init ();
bool detach (HANDLE = NULL);
diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc
index cd931be54..1d44f3280 100644
--- a/winsup/cygwin/fhandler_tty.cc
+++ b/winsup/cygwin/fhandler_tty.cc
@@ -46,9 +46,9 @@ struct pipe_reply {
fhandler_tty_master NO_COPY *tty_master;
-static DWORD WINAPI process_input (void *); // Input queue thread
-static DWORD WINAPI process_output (void *); // Output queue thread
-static DWORD WINAPI process_ioctl (void *); // Ioctl requests thread
+static void WINAPI process_input (void *) __attribute__((noreturn)); // Input queue thread
+static void WINAPI process_output (void *) __attribute__((noreturn)); // Output queue thread
+static void WINAPI process_ioctl (void *) __attribute__((noreturn)); // Ioctl requests thread
fhandler_tty_master::fhandler_tty_master ()
: fhandler_pty_master (), console (NULL)
@@ -89,18 +89,9 @@ fhandler_tty_master::init ()
set_close_on_exec (true);
- cygthread *h;
- h = new cygthread (process_input, 0, cygself, "ttyin");
- h->SetThreadPriority (THREAD_PRIORITY_HIGHEST);
- h->zap_h ();
-
- h = new cygthread (process_ioctl, 0, cygself, "ttyioctl");
- h->SetThreadPriority (THREAD_PRIORITY_HIGHEST);
- h->zap_h ();
-
- h = new cygthread (process_output, 0, cygself, "ttyout");
- h->SetThreadPriority (THREAD_PRIORITY_HIGHEST);
- h->zap_h ();
+ new cygthread (process_input, 0, cygself, "ttyin");
+ new cygthread (process_ioctl, 0, cygself, "ttyioctl");
+ new cygthread (process_output, 0, cygself, "ttyout");
return 0;
}
@@ -225,7 +216,7 @@ fhandler_pty_master::accept_input ()
return ret;
}
-static DWORD WINAPI
+static void WINAPI
process_input (void *)
{
char rawbuf[INP_BUFFER_SIZE];
@@ -414,7 +405,7 @@ out:
return rc;
}
-static DWORD WINAPI
+static void WINAPI
process_output (void *)
{
char buf[OUT_BUFFER_SIZE * 2];
@@ -436,7 +427,7 @@ process_output (void *)
/* Process tty ioctl requests */
-static DWORD WINAPI
+static void WINAPI
process_ioctl (void *)
{
while (1)