OSDN Git Service

2002-02-28 Robert Collins <rbtcollins@hotmail.com>
authorrbcollins <rbcollins>
Thu, 28 Feb 2002 14:25:52 +0000 (14:25 +0000)
committerrbcollins <rbcollins>
Thu, 28 Feb 2002 14:25:52 +0000 (14:25 +0000)
* Merged cygwin_daemon into head minus the new shm and ipc exports.

2002-02-28  Robert Collins  <rbtcollins@hotmail.com>

* fhandler_tty.cc (fhandler_tty_slave::open): More debugging.
(fhandler_tty_slave::read): Fix printf type for the handle.
* tty.cc (tty::common_init): Add a FIXME for security.

2002-01-29  Robert Collins  <rbtcollins@hotmail.com>

* Makefile.in (OBJS): Remove duplicate localtime.o.

2002-01-17  Robert Collins  <rbtcollins@hotmail.com>

* cygserver.cc (check_and_dup_handle): Consolidate the two variants for
simplicity.
Add Some basic debug output.
(client_request_attach_tty::serve): Use the new debug_printf for clarity.
Mark the duplicated handles as inheritable - fixup_after_fork() doesn't reopen
tty's.

2002-01-16  Robert Collins  <rbtcollins@hotmail.com>

* cygserver.cc (transport): Correct scope.
(client_request_attach_tty::serve): Add more debug information.
Fix erroneous use of transport instead of conn.
* cygserver_transport_pipes.cc (transport_layer_pipes::close): More debug.
(transport_layer_pipes::read): Ditto.
(transport_layer_pipes::write): Ditto.
(transport_layer_pipes::impersonate_client): Ditto.

Mon Oct  8  7:41:00 2001  Robert Collins <rbtcollins@hotmail.com>

* cygserver.cc (server_request::process): Rename client_request_shm_get to
client_request_shm.
* cygserver_process.cc (process_cache::add): Rename to add_task.
Use process_cleanup instead of process_request.
(process_cache::remove_process): New method.
(process::process): Initialize new members.
(process::~process): New member.
(process::cleanup): New method.
(process::add_cleanup_routine): New method.
(process_request::process): Rename to process_cleanup.
Call the process object's cleanup method and then delete it.
(process_process_param::request_loop): Remove the signalling process.
* cygserver_shm.cc: Globally rename client_request_shm_get to client_request_shm.
(client_request_shm_get::serve): Handle attach request counting.
* cygserver_shm.h: Globally rename client_request_shm_get to client_request_shm.
(class shm_cleanup): New class.
* shm.cc: Globally rename client_request_shm_get to client_request_shm.
(client_request_shm::client_request_shm): New constructor for attach requests.
(shmat): Use it.
* include/cygwin/cygserver_process.h (class process_request): Rename to
process_cleanup.
(class cleanup_routine): New class.
(class process): New members and methods to allow calling back when the process
terminates.

Thu Oct  4 14:12:00 2001  Robert Collins <rbtcollins@hotmail.com>
* cygserver.cc (request_loop): Make static.
(main): Use new cache constructor syntax.
Start cache worker threads.
Cleanup the cache at shutdown.
* cygserver_process.cc: Run indent.
(process_cache::process_cache): Add a trigger to use when adding a process.
(process_cache::process): Move process_entry to process.
Insert at the end of the list.
Trigger the request loop when new process's inserted.
(process_cache::process_requests): Do it.
(process_cache::add): New method.
(process_cache::handle_snapshot): New method.
(process::process): Merge in the process_entry fields.
(process::handle): Make a stub function.
(process::exit_code): New method.
(process_request::process): New method.
(process_process_param::request_loop): New method.
* cygserver_shm.cc: New header dependency - threaded_queue.h.
* threaded_queue.cc (threaded_queue::cleanup): Clearer messages.
(queue_process_param::stop): Short spinlock on interruptible threads.
* threaded_queue.h (class threaded_queue): New constructor.
* include/cygwin/cygserver_process.h (process_request): New class.
(process_entry): Remove.
(process): Merge in process_entry.
(process_cache): Inherit from threaded_queue.

Tue Oct  2 23:24:00 2001  Robert Collins <rbtcollins@hotmail.com>

* cygserver.cc (class server_process_param): Use new constructor syntax.
* cygserver_process.cc (process_cache::~process_cache): New function.
* threaded_queue.cc: Define condition debug_printf.
Run indent.
(threaded_queue::cleanup): Move queue_process_param guts to a method.
(threaded_queue::process_requests): Ditto.
(queue_process_param::queue_process_param): New method.
(queue_process_param::~queue_process_param): Ditto.
(queue_process_param::start): Ditto.
(queue_process_param::stop): Ditto.
* threaded_queue.h (class queue_process_param): Add support for
interruptible request loops.
* cygwin/include/cygwin/cygserver_process.h (class process_cache): Add
destructor.

Tue Oct  2 23:24:00 2001  Robert Collins <rbtcollins@hotmail.com>

* cygserver_client.cc: New flag allow_daemon to disable the daemon completely.
(cygserver_request): Check it.
(cygserver_init): Ditto.
* environ.cc (parse_thing): Add (no)daemon option.

Tue Oct  2 23:00:00 2001  Robert Collins <rbtcollins@hotmail.com>

* shm.cc: Update to handle include changes from HEAD.

Tue Oct  2 16:06:00 2001  Robert Collins <rbtcollins@hotmail.com>

* Makefile.in: Remove cygserver_shm.o from cygwin1.dll.
Rename cygserver_shm_outside.o to cygserver_shm.o.
* cygserver.cc (server_request::process): Use the new client_request
constructor.
* cygserver_client.cc: Remove the #ifdef's stubs for the server method
within cygwin.
(client_request_attach_tty::client_request_attach_tty): Use the new
client_request constructor.
(client_request_shutdown::client_request_shutdown): Ditto.
(client_request::client_request): Ditto.
* cygserver_shm.cc (client_request_shm_get::serve): Remove the
#ifdef'd stub for in-cygwin builds.
(client_request_shm_get::client_request_shm_get): Use the new
client_request constructor, and remove the in-cygwin variants.
* cygserver_shm.h (class client_request_shm_get): #ifndef test the
serve method - it's only used in cygserver.
* shm.cc (client_request_shm_get::client_request_shm_get): New function.
* include/cygwin/cygserver.h (request_header): New constructor.
(class client_request): Use it.
New constructor accepting the header size.
#ifndef test the server method - it's only used within cygserver.
(client_request_get_version): #ifdef test the server method.
(client_request_shutdown): Ditto.
(client_request_attach_tty): Ditto.

Tue Oct  2  9:57:00 2001  Robert Collins <rbtcollins@hotmail.com>

* Makefile.in: add threaded_queue.o to cygserver.exe.
* cygserver.cc: Include threaded_queue.h
(class server_request): Inherit from queue_request.
(class server_process_param): Inherit from queue_process_param.
(class server_request_queue): Inherit from threaded_queue.
(request_loop): Adjust for new types.
(server_request_queue::process_requests): Remove guts to
threaded_queue::process_requests.
(server_request::server_request): Adjust for new types.
(worker_function): Delete.
(server_request_queue::create_workers): Delete.
(server_request_queue::cleanup): Delete.
(server_request_queue::add): Move guts to threaded_queue::add.
* threaded_queue.cc: New file.
* threaded_queue.h: New file.

Mon Oct  1 12:38:00 2001  Robert Collins <rbtcollins@hotmail.com>

* cygserver.cc (client_request::serve): New function.
* cygserver_process.cc: Inlude <pthread.h> for pthread_once.
(process_cache::process_cache): Initialise a crtiical section for write access.
(process_cache::process): Use the critical section. Also add missing entries to
the cache.
(do_process_init): New function to initalise class process static variables.
(process::process): Ensure that the process access critical section is
initialised.
(process::handle): Close the handle of old process's when they have terminated
and we are returning the handle for a process with the same pid.
* cygserver_shm.cc: Run indent.
Include cygserver_process.h to allow process cache functionality.
(client_request_shm_get::serve): New parameter for process cache support.
Use the process cache, not OpenProcess to get a handle to the originating process.
Fix a handle leak with token_handle.
* cygserver_shm.h (class client_request_shm_get): Update ::serve for process
cache support.
* cygserver_transport_pipes.cc: Redefine debug_printf to be conditional on DEBUG.
* include/cygwin/cygserver.h: Do not implement client_request::serve in the
header.
* include/cygwin/cygserver_process.h (class process_cache): Add a write access
critical section to prevent races when requests from a  multithreaded
application arrive.

Sun Sep 30 23:41:00 2001  Robert Collins <rbtcollins@hotmail.com>

* Makefile.in: Add cygserver_process.o to cygserver.exe.
* cygserver.cc: Include signal.h and cygwin_version.h.
Define debug_printf as a macro.
Define DEBUG to a value.
(client_request_attach_tty::serve): Add beginning of process cache support.
Change from #ifdef DEBUG to work with new DEBUG style.
(client_request_get_version::serve): Add beginning of process cache support.
(class server_request): New prototype for support of process cache.
(class queue_process_param): New class to allow request loop threading.
(class server_request_queue): Add beginning of process cache support.
Allow request loop threading.
(request_loop): Thread function for request loops.
(server_request_queue::process_requests): Initiator for threaded request loops.
(client_request_shutdown::serve): Add beginning of process cache support.
(server_request::server_request): Ditto.
(server_request::process): Use debug_printf. Add beginning of process cache
support.
(server_request_queue::cleanup): Kill off any request loop threads.
(server_request_queue::add): Add beginning of process cache support.
(handle_signal): Trigger a shutdown.
(main): Print out some useful info at startup - version, date time.
Add process cache support.
Spawn a separate thread for the transport request loop, thus allowing concurrent
support for multiple transports.
* cygserver_client.cc (client_request_get_version::serve): Add process cache
support.
(client_request_attach_tty::serve): Add process cache support.
(client_request_shutdown::serve): Add process cache support.
* cygsserver_process.cc: New file with the process cache support.
* cygserver_shm.cc: Redefine debug_printf to allow conditional output.
* cygwin.din: Export shmdt().
* shm.cc: Run indent.
Update FIXME's.
(shmdt): New function.
* include/cygwin/cygserver.h (class client_request): Add process cache support.
(class client_request_get_version): Ditto.
(class client_request_shutdown): Ditto.
(class client_request_attach_tty): Ditto.
* include/cygwin/cygserver_process.h: New header for process cache support.

Sun Sep 30  8:52:00 2001  Robert Collins <rbtcollins@hotmail.com>

* include/cygwin/cygserver_transport.h: Add copyright header.
* include/cygwin/cygserver_transport_pipes.h: Ditto.
* include/cygwin/cygserver_transport_sockets.h: Ditto.

Sat Sep 29 20:40:00 2001  Robert Collins <rbtcollins@hotmail.com>

* Makefile.in: Add cygserver_transport_sockets.o to DLL_OFILES.
Add cygserver_transport_sockets_outside.o to cygserver.exe.
* cygserver.cc: Include new include files.
* cygserver_client.cc: Ditto.
* cygserver_shm.h: No need to include <sys/socket.h> now.
* cygerver_transport.cc: Include new include files.
(transport_layer_base::transport_layer_base): Strip back to a stub.
(transport_layer_base::listen): Ditto.
(transport_layer_base::accept): Ditto.
(transport_layer_base::close): Ditto.
(transport_layer_base::read): Ditto.
(transport_layer_base::write): Ditto.
(transport_layer_base::connect): Ditto.
* cygserver_transport_pipes.cc: Include new header
"cygwin/cygserver_transport_pipes.h".
* cygserver_transport_sockets.cc: New file.
* dcrt0.cc: No need to include <sys/socket.h> now.
* fhandler_tty.cc: Ditto.
* tty.cc: Ditto.
* include/cygwin/cygserver_transport.h: Strip the base class to a stub.
Remove the cygserver_transport_pipes class.
* include/cygwin/cygserver_transport_pipes.h: New file.
* include/cygwin/cygserver_transport_sockets.h: New file.

Tue Sep 25 16:22:00 2001  Robert Collins <rbtcollins@hotmail.com>

* autoload.cc: Add dynamic load statement for 'ImpersonateNamedPipeClient'.
* Makefile.in: Add new object files, and build instructions for cygserver.exe.
* cygwin.din: Export ftok, shmat, shmctl and shmget.
* dcrt0.cc: Additional includes for cygserver support.
(dll_crt0_1): Initialise the cygserver client.
* fhandler.h (fhandler_tty): New method cygserver_attach_tty.
* fhandler_tty.cc: Additional includes for cygserver support.
(fhandler_tty_slave::open): Attempt to use the cygserver when obtaining
handles from the parent process. On failure or 9x use the current method.
(fhandler_tty_slave::cygserver_attach_tty): New function.
* fork.cc (fork_child): Fixup shm memory mapped areas.
* pinfo.h: Declare fixup_shms_after_fork().
* security.h: Declare alloc_sd().
* tty.cc: Additonal includes to support cygserver.
(tty::common_init): Don't allow others to open us if the cygserver is running.
* winsup.h: Declare cygserver_running.
* cygserver.cc: New file.
* cygserver_client.cc: New file.
* cygserver_shm.cc: New file.
* cygserver_shm.h: New file.
* cygserver_transport.cc: New file.
* cygserver_transport_pipes.cc: New file.
* ipc.cc: New file.
* shm.cc: New file.
* include/cygwin/cygserver.h: New file.
* include/cygwin/cygserver_transport.h: New file.
* include/sys/ipc.h: New file.
* include/sys/shm.h: New file.

2002-02-28  Robert Collins  <rbtcollins@hotmail.com>

* thread.cc (semaphore::TryWait): Set errno as required by posix 1003.1.
(__sem_wait): Ditto.
(__sem_trywait): Ditto.

13 files changed:
winsup/cygwin/ChangeLog
winsup/cygwin/Makefile.in
winsup/cygwin/autoload.cc
winsup/cygwin/dcrt0.cc
winsup/cygwin/environ.cc
winsup/cygwin/fhandler.h
winsup/cygwin/fhandler_tty.cc
winsup/cygwin/fork.cc
winsup/cygwin/include/fnmatch.h
winsup/cygwin/pinfo.h
winsup/cygwin/security.h
winsup/cygwin/tty.cc
winsup/cygwin/winsup.h

index 4e87a57..de42965 100644 (file)
@@ -1,5 +1,296 @@
 2002-02-28  Robert Collins  <rbtcollins@hotmail.com>
 
+       * Merged cygwin_daemon into head minus the new shm and ipc exports.
+
+2002-02-28  Robert Collins  <rbtcollins@hotmail.com>
+
+       * fhandler_tty.cc (fhandler_tty_slave::open): More debugging.
+       (fhandler_tty_slave::read): Fix printf type for the handle.
+       * tty.cc (tty::common_init): Add a FIXME for security.
+
+2002-01-29  Robert Collins  <rbtcollins@hotmail.com>
+
+       * Makefile.in (OBJS): Remove duplicate localtime.o.
+
+2002-01-17  Robert Collins  <rbtcollins@hotmail.com>
+
+       * cygserver.cc (check_and_dup_handle): Consolidate the two variants for 
+       simplicity.
+       Add Some basic debug output.
+       (client_request_attach_tty::serve): Use the new debug_printf for clarity.
+       Mark the duplicated handles as inheritable - fixup_after_fork() doesn't reopen
+       tty's.
+
+2002-01-16  Robert Collins  <rbtcollins@hotmail.com>
+
+       * cygserver.cc (transport): Correct scope.
+       (client_request_attach_tty::serve): Add more debug information.
+       Fix erroneous use of transport instead of conn.
+       * cygserver_transport_pipes.cc (transport_layer_pipes::close): More debug.
+       (transport_layer_pipes::read): Ditto.
+       (transport_layer_pipes::write): Ditto.
+       (transport_layer_pipes::impersonate_client): Ditto.
+
+Mon Oct  8  7:41:00 2001  Robert Collins <rbtcollins@hotmail.com>
+
+       * cygserver.cc (server_request::process): Rename client_request_shm_get to
+       client_request_shm.
+       * cygserver_process.cc (process_cache::add): Rename to add_task.
+       Use process_cleanup instead of process_request.
+       (process_cache::remove_process): New method.
+       (process::process): Initialize new members.
+       (process::~process): New member.
+       (process::cleanup): New method.
+       (process::add_cleanup_routine): New method.
+       (process_request::process): Rename to process_cleanup.
+       Call the process object's cleanup method and then delete it.
+       (process_process_param::request_loop): Remove the signalling process.
+       * cygserver_shm.cc: Globally rename client_request_shm_get to client_request_shm.
+       (client_request_shm_get::serve): Handle attach request counting.
+       * cygserver_shm.h: Globally rename client_request_shm_get to client_request_shm.
+       (class shm_cleanup): New class.
+       * shm.cc: Globally rename client_request_shm_get to client_request_shm.
+       (client_request_shm::client_request_shm): New constructor for attach requests.
+       (shmat): Use it.
+       * include/cygwin/cygserver_process.h (class process_request): Rename to 
+       process_cleanup.
+       (class cleanup_routine): New class.
+       (class process): New members and methods to allow calling back when the process
+       terminates.
+
+Thu Oct  4 14:12:00 2001  Robert Collins <rbtcollins@hotmail.com>
+       * cygserver.cc (request_loop): Make static.
+       (main): Use new cache constructor syntax.
+       Start cache worker threads.
+       Cleanup the cache at shutdown.
+       * cygserver_process.cc: Run indent.
+       (process_cache::process_cache): Add a trigger to use when adding a process.
+       (process_cache::process): Move process_entry to process.
+       Insert at the end of the list.
+       Trigger the request loop when new process's inserted.
+       (process_cache::process_requests): Do it.
+       (process_cache::add): New method.
+       (process_cache::handle_snapshot): New method.
+       (process::process): Merge in the process_entry fields.
+       (process::handle): Make a stub function.
+       (process::exit_code): New method.
+       (process_request::process): New method.
+       (process_process_param::request_loop): New method.
+       * cygserver_shm.cc: New header dependency - threaded_queue.h.
+       * threaded_queue.cc (threaded_queue::cleanup): Clearer messages.
+       (queue_process_param::stop): Short spinlock on interruptible threads.
+       * threaded_queue.h (class threaded_queue): New constructor.
+       * include/cygwin/cygserver_process.h (process_request): New class.
+       (process_entry): Remove.
+       (process): Merge in process_entry.
+       (process_cache): Inherit from threaded_queue.
+
+Tue Oct  2 23:24:00 2001  Robert Collins <rbtcollins@hotmail.com>
+
+       * cygserver.cc (class server_process_param): Use new constructor syntax.
+       * cygserver_process.cc (process_cache::~process_cache): New function.
+       * threaded_queue.cc: Define condition debug_printf.
+       Run indent.
+       (threaded_queue::cleanup): Move queue_process_param guts to a method.
+       (threaded_queue::process_requests): Ditto.
+       (queue_process_param::queue_process_param): New method.
+       (queue_process_param::~queue_process_param): Ditto.
+       (queue_process_param::start): Ditto.
+       (queue_process_param::stop): Ditto.
+       * threaded_queue.h (class queue_process_param): Add support for 
+       interruptible request loops.
+       * cygwin/include/cygwin/cygserver_process.h (class process_cache): Add
+       destructor.
+
+Tue Oct  2 23:24:00 2001  Robert Collins <rbtcollins@hotmail.com>
+
+       * cygserver_client.cc: New flag allow_daemon to disable the daemon completely.
+       (cygserver_request): Check it.
+       (cygserver_init): Ditto.
+       * environ.cc (parse_thing): Add (no)daemon option.
+
+Tue Oct  2 23:00:00 2001  Robert Collins <rbtcollins@hotmail.com>
+
+       * shm.cc: Update to handle include changes from HEAD.
+
+Tue Oct  2 16:06:00 2001  Robert Collins <rbtcollins@hotmail.com>
+
+       * Makefile.in: Remove cygserver_shm.o from cygwin1.dll. 
+       Rename cygserver_shm_outside.o to cygserver_shm.o.
+       * cygserver.cc (server_request::process): Use the new client_request
+       constructor.
+       * cygserver_client.cc: Remove the #ifdef's stubs for the server method
+       within cygwin.
+       (client_request_attach_tty::client_request_attach_tty): Use the new
+       client_request constructor.
+       (client_request_shutdown::client_request_shutdown): Ditto.
+       (client_request::client_request): Ditto.
+       * cygserver_shm.cc (client_request_shm_get::serve): Remove the 
+       #ifdef'd stub for in-cygwin builds.
+       (client_request_shm_get::client_request_shm_get): Use the new
+       client_request constructor, and remove the in-cygwin variants.
+       * cygserver_shm.h (class client_request_shm_get): #ifndef test the
+       serve method - it's only used in cygserver.
+       * shm.cc (client_request_shm_get::client_request_shm_get): New function.
+       * include/cygwin/cygserver.h (request_header): New constructor.
+       (class client_request): Use it. 
+       New constructor accepting the header size.
+       #ifndef test the server method - it's only used within cygserver.
+       (client_request_get_version): #ifdef test the server method.
+       (client_request_shutdown): Ditto.
+       (client_request_attach_tty): Ditto.
+
+Tue Oct  2  9:57:00 2001  Robert Collins <rbtcollins@hotmail.com>
+
+       * Makefile.in: add threaded_queue.o to cygserver.exe.
+       * cygserver.cc: Include threaded_queue.h
+       (class server_request): Inherit from queue_request.
+       (class server_process_param): Inherit from queue_process_param.
+       (class server_request_queue): Inherit from threaded_queue.
+       (request_loop): Adjust for new types.
+       (server_request_queue::process_requests): Remove guts to 
+       threaded_queue::process_requests.
+       (server_request::server_request): Adjust for new types.
+       (worker_function): Delete.
+       (server_request_queue::create_workers): Delete.
+       (server_request_queue::cleanup): Delete.
+       (server_request_queue::add): Move guts to threaded_queue::add.
+       * threaded_queue.cc: New file.
+       * threaded_queue.h: New file.
+
+Mon Oct  1 12:38:00 2001  Robert Collins <rbtcollins@hotmail.com>
+
+       * cygserver.cc (client_request::serve): New function.
+       * cygserver_process.cc: Inlude <pthread.h> for pthread_once.
+       (process_cache::process_cache): Initialise a crtiical section for write access.
+       (process_cache::process): Use the critical section. Also add missing entries to 
+       the cache.
+       (do_process_init): New function to initalise class process static variables.
+       (process::process): Ensure that the process access critical section is 
+       initialised.
+       (process::handle): Close the handle of old process's when they have terminated
+       and we are returning the handle for a process with the same pid.
+       * cygserver_shm.cc: Run indent.
+       Include cygserver_process.h to allow process cache functionality.
+       (client_request_shm_get::serve): New parameter for process cache support.
+       Use the process cache, not OpenProcess to get a handle to the originating process.
+       Fix a handle leak with token_handle.
+       * cygserver_shm.h (class client_request_shm_get): Update ::serve for process 
+       cache support.
+       * cygserver_transport_pipes.cc: Redefine debug_printf to be conditional on DEBUG.
+       * include/cygwin/cygserver.h: Do not implement client_request::serve in the 
+       header.
+       * include/cygwin/cygserver_process.h (class process_cache): Add a write access 
+       critical section to prevent races when requests from a  multithreaded 
+       application arrive.
+
+Sun Sep 30 23:41:00 2001  Robert Collins <rbtcollins@hotmail.com>
+
+       * Makefile.in: Add cygserver_process.o to cygserver.exe.
+       * cygserver.cc: Include signal.h and cygwin_version.h.
+       Define debug_printf as a macro.
+       Define DEBUG to a value.
+       (client_request_attach_tty::serve): Add beginning of process cache support.
+       Change from #ifdef DEBUG to work with new DEBUG style.
+       (client_request_get_version::serve): Add beginning of process cache support.
+       (class server_request): New prototype for support of process cache.
+       (class queue_process_param): New class to allow request loop threading.
+       (class server_request_queue): Add beginning of process cache support.
+       Allow request loop threading.
+       (request_loop): Thread function for request loops.
+       (server_request_queue::process_requests): Initiator for threaded request loops.
+       (client_request_shutdown::serve): Add beginning of process cache support.
+       (server_request::server_request): Ditto.
+       (server_request::process): Use debug_printf. Add beginning of process cache 
+       support.
+       (server_request_queue::cleanup): Kill off any request loop threads.
+       (server_request_queue::add): Add beginning of process cache support.
+       (handle_signal): Trigger a shutdown.
+       (main): Print out some useful info at startup - version, date time.
+       Add process cache support.
+       Spawn a separate thread for the transport request loop, thus allowing concurrent
+       support for multiple transports.
+       * cygserver_client.cc (client_request_get_version::serve): Add process cache 
+       support.
+       (client_request_attach_tty::serve): Add process cache support.
+       (client_request_shutdown::serve): Add process cache support.
+       * cygsserver_process.cc: New file with the process cache support.
+       * cygserver_shm.cc: Redefine debug_printf to allow conditional output.
+       * cygwin.din: Export shmdt().
+       * shm.cc: Run indent.
+       Update FIXME's.
+       (shmdt): New function.
+       * include/cygwin/cygserver.h (class client_request): Add process cache support.
+       (class client_request_get_version): Ditto.
+       (class client_request_shutdown): Ditto.
+       (class client_request_attach_tty): Ditto.
+       * include/cygwin/cygserver_process.h: New header for process cache support.
+
+Sun Sep 30  8:52:00 2001  Robert Collins <rbtcollins@hotmail.com>
+
+       * include/cygwin/cygserver_transport.h: Add copyright header.
+       * include/cygwin/cygserver_transport_pipes.h: Ditto.
+       * include/cygwin/cygserver_transport_sockets.h: Ditto.
+
+Sat Sep 29 20:40:00 2001  Robert Collins <rbtcollins@hotmail.com>
+
+       * Makefile.in: Add cygserver_transport_sockets.o to DLL_OFILES.
+       Add cygserver_transport_sockets_outside.o to cygserver.exe.
+       * cygserver.cc: Include new include files.
+       * cygserver_client.cc: Ditto.
+       * cygserver_shm.h: No need to include <sys/socket.h> now.
+       * cygerver_transport.cc: Include new include files.
+       (transport_layer_base::transport_layer_base): Strip back to a stub.
+       (transport_layer_base::listen): Ditto.
+       (transport_layer_base::accept): Ditto.
+       (transport_layer_base::close): Ditto.
+       (transport_layer_base::read): Ditto.
+       (transport_layer_base::write): Ditto.
+       (transport_layer_base::connect): Ditto.
+       * cygserver_transport_pipes.cc: Include new header 
+       "cygwin/cygserver_transport_pipes.h".
+       * cygserver_transport_sockets.cc: New file.
+       * dcrt0.cc: No need to include <sys/socket.h> now.
+       * fhandler_tty.cc: Ditto.
+       * tty.cc: Ditto.
+       * include/cygwin/cygserver_transport.h: Strip the base class to a stub.
+       Remove the cygserver_transport_pipes class.
+       * include/cygwin/cygserver_transport_pipes.h: New file.
+       * include/cygwin/cygserver_transport_sockets.h: New file.
+
+Tue Sep 25 16:22:00 2001  Robert Collins <rbtcollins@hotmail.com>
+
+       * autoload.cc: Add dynamic load statement for 'ImpersonateNamedPipeClient'.
+       * Makefile.in: Add new object files, and build instructions for cygserver.exe.
+       * cygwin.din: Export ftok, shmat, shmctl and shmget.
+       * dcrt0.cc: Additional includes for cygserver support.
+       (dll_crt0_1): Initialise the cygserver client.
+       * fhandler.h (fhandler_tty): New method cygserver_attach_tty.
+       * fhandler_tty.cc: Additional includes for cygserver support.
+       (fhandler_tty_slave::open): Attempt to use the cygserver when obtaining
+       handles from the parent process. On failure or 9x use the current method.
+       (fhandler_tty_slave::cygserver_attach_tty): New function.
+       * fork.cc (fork_child): Fixup shm memory mapped areas.
+       * pinfo.h: Declare fixup_shms_after_fork().
+       * security.h: Declare alloc_sd().
+       * tty.cc: Additonal includes to support cygserver.
+       (tty::common_init): Don't allow others to open us if the cygserver is running.
+       * winsup.h: Declare cygserver_running.
+       * cygserver.cc: New file.
+       * cygserver_client.cc: New file.
+       * cygserver_shm.cc: New file.
+       * cygserver_shm.h: New file.
+       * cygserver_transport.cc: New file.
+       * cygserver_transport_pipes.cc: New file.
+       * ipc.cc: New file.
+       * shm.cc: New file.
+       * include/cygwin/cygserver.h: New file.
+       * include/cygwin/cygserver_transport.h: New file.
+       * include/sys/ipc.h: New file.
+       * include/sys/shm.h: New file.
+
+2002-02-28  Robert Collins  <rbtcollins@hotmail.com>
+
        * thread.cc (semaphore::TryWait): Set errno as required by posix 1003.1.
        (__sem_wait): Ditto.
        (__sem_trywait): Ditto.
 
 2002-01-01  Christopher Faylor  <cgf@redhat.com>
 
-       * speclib: Remove temp files automatically.
+        * speclib: Remove temp files automatically.
 
 2002-01-01  Corinna Vinschen  <corinna@vinschen.de>
-
        * fhandler.h (fhandler_socket::sun_path): New private member.
        (fhandler_socket::set_sun_path): New method.
        (fhandler_socket::get_sun_path): Ditto.
index c8cad30..30cf31f 100644 (file)
@@ -118,17 +118,18 @@ MALLOC_OFILES=@MALLOC_OFILES@
 DLL_IMPORTS:=$(w32api_lib)/libkernel32.a
 
 # Please maintain this list in sorted order, with maximum files per line
-DLL_OFILES:=assert.o autoload.o cygheap.o dcrt0.o debug.o delqueue.o dir.o \
-       dlfcn.o dll_init.o dtable.o environ.o  errno.o exceptions.o exec.o \
-       external.o fcntl.o fhandler.o fhandler_clipboard.o fhandler_console.o \
+DLL_OFILES:=assert.o autoload.o cygheap.o cygserver_client.o cygserver_transport.o \
+       cygserver_transport_pipes.o cygserver_transport_sockets.o dcrt0.o debug.o \
+       delqueue.o dir.o dlfcn.o dll_init.o dtable.o environ.o errno.o exceptions.o \
+       exec.o external.o fcntl.o fhandler.o fhandler_clipboard.o fhandler_console.o \
        fhandler_disk_file.o fhandler_dsp.o fhandler_floppy.o fhandler_mem.o \
        fhandler_random.o fhandler_raw.o fhandler_serial.o fhandler_socket.o \
        fhandler_tape.o fhandler_termios.o fhandler_tty.o fhandler_windows.o \
-       fhandler_zero.o fnmatch.o fork.o glob.o grp.o heap.o init.o ioctl.o \
+       fhandler_zero.o fnmatch.o fork.o glob.o grp.o heap.o init.o ioctl.o ipc.o \
        localtime.o malloc.o miscfuncs.o mmap.o net.o ntea.o passwd.o path.o \
        pinfo.o pipe.o poll.o pthread.o regcomp.o regerror.o regexec.o \
        regfree.o registry.o resource.o scandir.o sched.o sec_acl.o \
-       sec_helper.o security.o select.o shared.o shortcut.o signal.o \
+       sec_helper.o security.o select.o shared.o shm.o shortcut.o signal.o \
        sigproc.o smallprint.o spawn.o strace.o strsep.o sync.o syscalls.o \
        sysconf.o syslog.o termios.o thread.o times.o tty.o uinfo.o uname.o \
        v8_regexp.o v8_regerror.o v8_regsub.o wait.o wincap.o window.o \
@@ -148,7 +149,7 @@ EXTRALIBS:=libautomode.a libbinmode.a libtextmode.a
 INSTOBJS:=automode.o binmode.o textmode.o
 TARGET_LIBS:=$(LIB_NAME) $(SUBLIBS) $(GMON_START) $(LIBGMON_A) $(SUBLIBS) $(INSTOBJS) $(EXTRALIBS)
 .PHONY: all force dll_ofiles install all_target install_target all_host install_host \
-       install install_target install-libs install-headers
+       install install-libs install-headers
 
 .SUFFIXES:
 .SUFFIXES: .c .cc .def .a .o .d
@@ -158,13 +159,14 @@ install_host=@install_host@
 
 all: all_target $(all_host)
 
-all_target: $(TARGET_LIBS)
+all_target: $(TARGET_LIBS) cygserver.exe
 
 all_host: new-$(LIB_NAME) cygrun.exe
 
 force:
 
-install: install-libs install-headers install-man $(install_host) $(install_target)
+install: install-bin install-libs install-headers install-man install_target \
+       $(install_host) $(install_target)
 
 uninstall: uninstall-libs uninstall-headers uninstall-man 
 
@@ -198,6 +200,9 @@ install-man:
            $(INSTALL_DATA) $$i $(tooldir)/man/man7/`basename $$i` ; \
        done
 
+install_target: cygserver.exe
+       $(INSTALL_PROGRAM) cygserver.exe $(bindir)/cygserver.exe
+       
 install_host:
 
 
@@ -301,6 +306,32 @@ cygrun.exe : cygrun.o $(LIB_NAME) $(w32api_lib)/libuser32.a \
             $(w32api_lib)/libshell32.a $(w32api_lib)/libkernel32.a
        $(CC) -nodefaultlibs -o $@ $^
 
+cygserver_transport_outside.o: cygserver_transport.cc
+       $(COMPILE_CXX) -D__OUTSIDE_CYGWIN__ -o $@ $<
+
+cygserver_transport_pipes_outside.o: cygserver_transport_pipes.cc
+       $(COMPILE_CXX) -D__OUTSIDE_CYGWIN__ -o $@ $<
+
+cygserver_transport_sockets_outside.o: cygserver_transport_sockets.cc
+       $(COMPILE_CXX) -D__OUTSIDE_CYGWIN__ -o $@ $<
+
+cygserver_client_outside.o: cygserver_client.cc
+        $(COMPILE_CXX) -D__OUTSIDE_CYGWIN__ -o $@ $<
+
+cygserver_shm.o: cygserver_shm.cc
+       $(COMPILE_CXX) -D__OUTSIDE_CYGWIN__ -o $@ $<
+
+cygserver.exe: cygserver.o cygserver_shm.o cygserver_transport_outside.o cygserver_transport_pipes_outside.o cygserver_transport_sockets_outside.o cygserver_client_outside.o cygserver_process.o threaded_queue.o wincap.o version.o smallprint.o 
+       $(CXX) -o $@ $^
+#ifdef VERBOSE
+#      $(CXX) $(MINGW_CXXFLAGS) -o $@ ${wordlist 1,3,$^} -B$(mingw_build)/ $(MINGW_LDFLAGS)
+#else
+#      @echo $(CXX) -o $@ ${wordlist 1,3,$^} ${filter-out -B%, $(MINGW_CXXFLAGS) $(MINGW_LDFLAGS)};\
+#      $(CXX) $(MINGW_CXXFLAGS) -o $@ ${wordlist 1,3,$^} -B$(mingw_build)/ $(MINGW_LDFLAGS)
+#endif
+
+#\f
+
 Makefile: cygwin.din
 
 $(DEF_FILE): cygwin.din config.status
index 020ab44..ec71b66 100644 (file)
@@ -326,6 +326,7 @@ LoadDLLfunc (GetSidSubAuthorityCount, 4, advapi32)
 LoadDLLfunc (GetTokenInformation, 20, advapi32)
 LoadDLLfunc (GetUserNameA, 8, advapi32)
 LoadDLLfunc (ImpersonateLoggedOnUser, 4, advapi32)
+LoadDLLfunc (ImpersonateNamedPipeClient, 4, advapi32)
 LoadDLLfunc (InitializeAcl, 12, advapi32)
 LoadDLLfunc (InitializeSecurityDescriptor, 8, advapi32)
 LoadDLLfunc (InitializeSid, 12, advapi32)
index c50e30a..38b1df0 100644 (file)
@@ -35,6 +35,8 @@ details. */
 #include "shared_info.h"
 #include "cygwin_version.h"
 #include "dll_init.h"
+#include "cygwin/cygserver_transport.h"
+#include "cygwin/cygserver.h"
 
 #define MAX_AT_FILE_LEVEL 10
 
@@ -685,6 +687,8 @@ dll_crt0_1 ()
   /* Initialize signal/subprocess handling. */
   sigproc_init ();
 
+  cygserver_init ();
+
   /* Connect to tty. */
   tty_init ();
 
index fcd1262..3857c44 100644 (file)
@@ -28,6 +28,7 @@ details. */
 #include "registry.h"
 #include "environ.h"
 
+extern BOOL allow_daemon;
 extern BOOL allow_glob;
 extern bool ignore_case_with_glob;
 extern BOOL allow_ntea;
@@ -510,6 +511,7 @@ static struct parse_thing
   {"binmode", {x: &binmode}, justset, NULL, {{O_TEXT}, {O_BINARY}}},
   {"check_case", {func: &check_case_init}, isfunc, NULL, {{0}, {0}}},
   {"codepage", {func: &codepage_init}, isfunc, NULL, {{0}, {0}}},
+  {"daemon", {&allow_daemon}, justset, NULL, {{FALSE}, {TRUE}}},
   {"envcache", {&envcache}, justset, NULL, {{TRUE}, {FALSE}}},
   {"error_start", {func: &error_start_init}, isfunc, NULL, {{0}, {0}}},
   {"export", {&export_settings}, justset, NULL, {{FALSE}, {TRUE}}},
index 7a94f04..9cab190 100644 (file)
@@ -840,6 +840,8 @@ class fhandler_tty_slave: public fhandler_tty_common
   __off64_t lseek (__off64_t, int) { return 0; }
   select_record *select_read (select_record *s);
   int ready_for_read (int fd, DWORD howlong);
+
+  int cygserver_attach_tty (HANDLE*, HANDLE*);
 };
 
 class fhandler_pty_master: public fhandler_tty_common
index 2be27f8..6481350 100644 (file)
@@ -26,6 +26,8 @@ details. */
 #include "pinfo.h"
 #include "cygheap.h"
 #include "shared_info.h"
+#include "cygwin/cygserver_transport.h"
+#include "cygwin/cygserver.h"
 
 /* Tty master stuff */
 
@@ -510,38 +512,54 @@ fhandler_tty_slave::open (path_conv *, int flags, mode_t)
       return 0;
     }
 
-  HANDLE tty_owner = OpenProcess (PROCESS_DUP_HANDLE, FALSE,
-                                    get_ttyp ()->master_pid);
-  if (tty_owner == NULL)
-    {
-      termios_printf ("can't open tty (%d) handle process %d",
-                     ttynum, get_ttyp ()->master_pid);
-      __seterrno ();
-      return 0;
-    }
+  HANDLE from_master_local, to_master_local;
 
-  HANDLE nh;
-  if (!DuplicateHandle (tty_owner, get_ttyp ()->from_master, hMainProc, &nh, 0, TRUE,
-                       DUPLICATE_SAME_ACCESS))
-    {
-      termios_printf ("can't duplicate input, %E");
-      __seterrno ();
-      return 0;
-    }
-  set_io_handle (nh);
-  ProtectHandle1 (nh, from_pty);
-  termios_printf ("duplicated from_master %p->%p from tty_owner %p",
-                 get_ttyp ()->from_master, nh, tty_owner);
-  if (!DuplicateHandle (tty_owner, get_ttyp ()->to_master, hMainProc, &nh, 0, TRUE,
-                       DUPLICATE_SAME_ACCESS))
+  if (!wincap.has_security () ||
+      cygserver_running!=CYGSERVER_OK ||
+      !cygserver_attach_tty ( &from_master_local, &to_master_local))
     {
-      termios_printf ("can't duplicate output, %E");
-      __seterrno ();
-      return 0;
+      termios_printf ("cannot dup handles via server. using old method.");
+
+      HANDLE tty_owner = OpenProcess (PROCESS_DUP_HANDLE, FALSE,
+                                        get_ttyp ()->master_pid);
+      termios_printf ("tty own handle %p",tty_owner);
+      if (tty_owner == NULL)
+        {
+          termios_printf ("can't open tty (%d) handle process %d",
+                         ttynum, get_ttyp ()->master_pid);
+          __seterrno ();
+          return 0;
+        }
+
+      if (!DuplicateHandle (tty_owner, get_ttyp ()->from_master, 
+                         hMainProc, &from_master_local, 0, TRUE,
+                           DUPLICATE_SAME_ACCESS))
+        {
+          termios_printf ("can't duplicate input, %E");
+          __seterrno ();
+          return 0;
+        }
+
+      if (!DuplicateHandle (tty_owner, get_ttyp ()->to_master, 
+                         hMainProc, &to_master_local, 0, TRUE,
+                         DUPLICATE_SAME_ACCESS))
+        {
+          termios_printf ("can't duplicate output, %E");
+          __seterrno ();
+          return 0;
+        }
+      CloseHandle (tty_owner);
     }
-  set_output_handle (nh);
-  ProtectHandle1 (nh, to_pty);
-  CloseHandle (tty_owner);
+
+  termios_printf ("duplicated from_master %p->%p from tty_owner",
+      get_ttyp ()->from_master, from_master_local);
+  termios_printf ("duplicated to_master %p->%p from tty_owner",
+      get_ttyp ()->to_master, to_master_local);
+
+  set_io_handle (from_master_local);
+  ProtectHandle1 (from_master_local, from_pty);
+  set_output_handle (to_master_local);
+  ProtectHandle1 (to_master_local, to_pty);
 
   set_open_status ();
   termios_printf ("tty%d opened", ttynum);
@@ -549,6 +567,39 @@ fhandler_tty_slave::open (path_conv *, int flags, mode_t)
   return 1;
 }
 
+int
+fhandler_tty_slave::cygserver_attach_tty (LPHANDLE from_master_ptr,
+                                        LPHANDLE to_master_ptr)
+{
+  if (!from_master_ptr || !to_master_ptr)
+    return 0;
+
+  client_request_attach_tty *request = 
+       new client_request_attach_tty ((DWORD) GetCurrentProcessId (),
+                                     (DWORD) get_ttyp ()->master_pid,
+                                     (HANDLE) get_ttyp ()->from_master,
+                                     (HANDLE) get_ttyp ()->to_master);
+
+  if (cygserver_request (request) != 0 ||
+       request->header.error_code != 0)
+    return 0;
+
+/*
+  struct request_attach_tty req;
+  INIT_REQUEST (req, CYGSERVER_REQUEST_ATTACH_TTY);
+  req.pid = GetCurrentProcessId ();
+  req.master_pid = get_ttyp ()->master_pid;
+  req.from_master = get_ttyp ()->from_master;
+  req.to_master = get_ttyp ()->to_master;
+  if (cygserver_request ((struct request_header*) &req) != 0)
+    return 0;
+*/
+  *from_master_ptr = request->from_master ();
+  *to_master_ptr = request->to_master ();
+  delete request;
+  return 1;
+}
+
 void
 fhandler_tty_slave::init (HANDLE, DWORD a, mode_t)
 {
@@ -634,7 +685,7 @@ fhandler_tty_slave::read (void *ptr, size_t len)
   DWORD rc;
   HANDLE w4[2];
 
-  termios_printf ("read(%x, %d) handle %d", ptr, len, get_handle ());
+  termios_printf ("read(%x, %d) handle %p", ptr, len, get_handle ());
 
   if (!(get_ttyp ()->ti.c_lflag & ICANON))
     {
index 1927a56..f7133df 100644 (file)
@@ -303,6 +303,9 @@ fork_child (HANDLE& hParent, dll *&first_dll, bool& load_dlls)
   if (fixup_mmaps_after_fork ())
     api_fatal ("recreate_mmaps_after_fork_failed");
 
+  if (fixup_shms_after_fork ())
+    api_fatal ("recreate_shm areas after fork failed");
+
   /* Set thread local stuff to zero.  Under Windows 95/98 this is sometimes
      non-zero, for some reason.
      FIXME:  There is a memory leak here after a fork. */
index 70a5fec..e4500ab 100644 (file)
@@ -1,9 +1,9 @@
-/*     $OpenBSD: fnmatch.h,v 1.5 2000/03/24 17:13:23 millert Exp $     */
-/*     $NetBSD: fnmatch.h,v 1.5 1994/10/26 00:55:53 cgd Exp $  */
+/*      $OpenBSD: fnmatch.h,v 1.5 2000/03/24 17:13:23 millert Exp $        */
+/*      $NetBSD: fnmatch.h,v 1.5 1994/10/26 00:55:53 cgd Exp $        */
 
 /*-
  * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
+ *      The Regents of the University of California.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -15,8 +15,8 @@
  *    documentation and/or other materials provided with the distribution.
  * 3. All advertising materials mentioning features or use of this software
  *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
+ *      This product includes software developed by the University of
+ *      California, Berkeley and its contributors.
  * 4. Neither the name of the University nor the names of its contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *     @(#)fnmatch.h   8.1 (Berkeley) 6/2/93
+ *      @(#)fnmatch.h        8.1 (Berkeley) 6/2/93
  */
 
-#ifndef        _FNMATCH_H_
-#define        _FNMATCH_H_
+#ifndef _FNMATCH_H_
+#define _FNMATCH_H_
 
-#define        FNM_NOMATCH     1       /* Match failed. */
-#define        FNM_NOSYS       2       /* Function not supported (unused). */
+#define FNM_NOMATCH        1        /* Match failed. */
+#define FNM_NOSYS        2        /* Function not supported (unused). */
 
-#define        FNM_NOESCAPE    0x01    /* Disable backslash escaping. */
-#define        FNM_PATHNAME    0x02    /* Slash must be matched by slash. */
-#define        FNM_PERIOD      0x04    /* Period must be matched by period. */
+#define FNM_NOESCAPE        0x01        /* Disable backslash escaping. */
+#define FNM_PATHNAME        0x02        /* Slash must be matched by slash. */
+#define FNM_PERIOD        0x04        /* Period must be matched by period. */
 #ifndef _POSIX_SOURCE
-#define        FNM_LEADING_DIR 0x08    /* Ignore /<tail> after Imatch. */
-#define        FNM_CASEFOLD    0x10    /* Case insensitive search. */
-#define        FNM_IGNORECASE  FNM_CASEFOLD
-#define        FNM_FILE_NAME   FNM_PATHNAME
+#define FNM_LEADING_DIR        0x08        /* Ignore /<tail> after Imatch. */
+#define FNM_CASEFOLD        0x10        /* Case insensitive search. */
+#define FNM_IGNORECASE        FNM_CASEFOLD
+#define FNM_FILE_NAME        FNM_PATHNAME
 #endif
 
 #include <sys/cdefs.h>
 
 __BEGIN_DECLS
-int     fnmatch __P((const char *, const char *, int));
+int      fnmatch __P((const char *, const char *, int));
 __END_DECLS
 
 #endif /* !_FNMATCH_H_ */
+
+
index 84a9731..1bc2f79 100644 (file)
@@ -201,6 +201,8 @@ extern HANDLE hexec_proc;
 
 /* For mmaps across fork(). */
 int __stdcall fixup_mmaps_after_fork ();
+/* for shm areas across fork (). */
+int __stdcall fixup_shms_after_fork ();
 
 void __stdcall fill_rusage (struct rusage *, HANDLE);
 void __stdcall add_rusage (struct rusage *, struct rusage *);
index 0c3cbc9..220f571 100644 (file)
@@ -204,6 +204,8 @@ extern SECURITY_ATTRIBUTES *__stdcall __sec_user (PVOID sa_buf, PSID sid2, BOOL
 
 int __stdcall NTReadEA (const char *file, const char *attrname, char *buf, int len);
 BOOL __stdcall NTWriteEA (const char *file, const char *attrname, const char *buf, int len);
+PSECURITY_DESCRIPTOR alloc_sd (uid_t uid, gid_t gid, const char *logsrv, int attribute,
+          PSECURITY_DESCRIPTOR sd_ret, DWORD *sd_size_ret);
 
 extern inline SECURITY_ATTRIBUTES *
 sec_user_nih (char sa_buf[], PSID sid = NULL)
index e50e0eb..52ef8e4 100644 (file)
@@ -24,6 +24,8 @@ details. */
 #include "sync.h"
 #include "sigproc.h"
 #include "pinfo.h"
+#include "cygwin/cygserver_transport.h"
+#include "cygwin/cygserver.h"
 #include "shared_info.h"
 
 extern fhandler_tty_master *tty_master;
@@ -396,7 +398,10 @@ tty::common_init (fhandler_pty_master *ptym)
 
   /* Allow the others to open us (for handle duplication) */
 
-  if (wincap.has_security () &&
+  /* FIXME: we shold NOT set the security wide open when the
+     daemon is running
+   */
+  if (wincap.has_security () && cygserver_running==CYGSERVER_OK &&
       (SetKernelObjectSecurity (hMainProc, DACL_SECURITY_INFORMATION,
                               get_null_sd ()) == FALSE))
     small_printf ("Can't set process security, %E");
index d3daec2..ea9251a 100644 (file)
@@ -75,6 +75,8 @@ extern "C" DWORD WINAPI GetLastError (void);
 enum codepage_type {ansi_cp, oem_cp};
 extern codepage_type current_codepage;
 
+extern int cygserver_running;
+
 /* Used to check if Cygwin DLL is dynamically loaded. */
 extern int dynamically_loaded;