summaryrefslogtreecommitdiffstats
path: root/winsup/cygserver/sysv_shm.cc
Commit message (Collapse)AuthorAgeFilesLines
* Revert "cygserver: Revamp thread sleep handling"Corinna Vinschen2017-06-201-6/+0
| | | | This reverts commit b80b2c011936f7f075b76b6e59f9e8a5ec49caa1.
* cygserver: Revamp thread sleep handlingCorinna Vinschen2017-03-241-0/+6
| | | | | | | | | | | | | | | | | | | | The current implementation is a very simple approach to implement a statically sized sleep queue. The problem is that this code requires a certain amount of synchronization because the slots in the queue are used dynamically. To top it off, the Event objects used for sync'ing are created and destroyed on demand. This is complicated, slow, and error prone. There's also a blatant bug here: The number of slots in the queue was wrongly computed in size. It was too small if XSI IPC was used a lot. Make the code more robust. Let the queue have the right size. Every slot is now used for a specific IPC object. All sync objects (switched to Semaphores) are only created when first required, but never destroyed. This reduces the usage of a critical section to the creation of a new sync object. Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
* * Merge in cygwin-64bit-branch.Corinna Vinschen2013-04-231-3/+3
|
* * sysv_shm.cc (ACCESSPERMS): Remove to fix redefined warning, asYaakov Selkowitz2011-08-191-1/+0
| | | | this is now defined in <sys/stat.h>.
* * bsd_helper.cc (tunable_params): Add kern.ipc.shm_allow_removed asCorinna Vinschen2007-11-051-2/+4
| | | | | | | | bool parameter. * cygserver.conf: Add a description for the kern.ipc.shm_allow_removed parameter. * sysv_shm.cc (shminit): Set shm_allow_removed variable according to kern.ipc.shm_allow_removed setting.
* * Makefile.in (OBJS): Drop transport_sockets.o.Corinna Vinschen2007-02-221-1/+1
| | | | | | | | * sysv_shm.cc (shmget_allocate_segment): Remove spurious cast. * transport.cc: Don't include transport_sockets.h. (create_server_transport): Always create transport_layer_pipes. * transport_sockets.cc: Remove. * transport_sockets.h: Remove.
* Check FreeBSD upstream changes and apply important patches.Corinna Vinschen2006-01-091-1/+2
| | | | | | * sysv_sem.cc (__semctl): Check copyin return value (from 1.76). * sysv_shm.cc (shminit): Actually use the iterating variable in the for loop when trying to avoid overflow (from 1.102).
* * bsd_helper.cc (ipcexit_hookthread): Fix whitespace and handle leak.Corinna Vinschen2005-04-061-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * bsd_mutex.cc: Include stdlib.h, sys/msg.h and sys/sem.h. (mtx_init): Initialize lock counter to 0. (_mtx_lock): Increment and log mutex lock counter. (mtx_owned): Add winpid argument. Return true only if mutex is actually owned by process winpid. (_mtx_assert): Add winpid argument accordingly. (_mtx_unlock): Log owner and lock count. (MSLEEP_MUTEX): Remove. (MSLEEP_SEM): Ditto. (MSLEEP_EVENT): Ditto. (msleep_event_name): Ditto. (msleep_cs): New global critical section. (msleep_cnt): New global variable indicating msleep record usage. (msleep_max_cnt): New global variable indicating msleep record size. (msleep_arr): New global pointer to msleep records. (msleep_init): Initialize msleep_cs. Allocate msleep_arr array. (_msleep): Rewrite using new msleep_cs/msleep_arr based thread synchronization. Don't be shy with debug output. (wakeup): Rewrite using new msleep_cs/msleep_arr based thread synchronization. * bsd_mutex.h (struct mtx): Add lock counter for better debugging. (mtx_owned): Declare with winpid argument. (_mtx_assert): Ditto. (mtx_assert): Define with winpid argument. * cygserver.cc (version): Remove. (SERVER_VERSION): New define, decoupling server version information from source code control system. (print_version): Simplify printing server version. * process.cc (process::process): Fix wrong bracketing (and handle leak). (process::~process): Only try to close _signal_arrived if valid. * sysv_sem.cc: Include sys/smallprint.h. (semundo_clear): Define with additional struct thread pointer argument. Accomodate throughout. (SEMUNDO_LOCKASSERT): Define with winpid argument. Accomodate throughout. (struct sem_undo): Define un_proc as pid_t on Cygwin. Accomodate throughout. (seminit): Improve debugging by adding the semid to the mutex name. (semget): Correctly print key value as 64 bit hex value in debug output. (semexit_myhook): Remove Cygwin specific unlocking of mutexes owned by exiting process. Keep semaphore global lock throughout whole function to avoid races. * sysv_shm.cc (GIANT_REQUIRED): Define empty on Cygwin. We know that Giant is locked.
* * sysv_shm.cc (kern_shmat): Avoid compiler warning.Corinna Vinschen2004-09-231-0/+4
|
* * sysv_shm.cc (vm_object_reference): remove Cygwin specific define.Corinna Vinschen2004-09-211-8/+8
| | | | | | | (vm_map_find): Ditto. (vm_map_inherit): Ditto. (kern_shmat): On Cygwin, take shmaddr just as is. Don't call vm system calls on Cygwin. Add comment.
* * sysv_shm.cc (kern_shmat): Add debug_printf's.Corinna Vinschen2004-08-311-0/+2
|
* * shm.cc (shmget): Explicitely set td_retval[0] to -1 on error.Corinna Vinschen2004-06-031-0/+2
|
* * sysv_shm.cc (shmget): Allow to retrieve shared memory segmentsCorinna Vinschen2004-03-301-0/+6
| | | | by shmid when IPC_KEY_IS_SHMID is set.
* Don't use safe_new but new throughout. Fix copyright datesCorinna Vinschen2003-11-191-0/+1025
throughout. * Makefile.in: Accomodate all new files and name changes. Add a *.d dependency. (sbindir): Add. (etcdir): Drop in favor of more appropriate sysconfdir definition. (sysconfdir): Add. (CXXFLAGS): Add -MMD flag. Add SYSCONFDIR definition. (.SUFFIXES): Add. (install): Add action items. (libclean): New target. (fullclean): Ditto. * bsd_helper.cc: New file. * bsd_helper.h: Ditto. * bsd_log.cc: Ditto. * bsd_log.h: Ditto. * bsd_mutex.cc: Ditto. * bsd_mutex.h: Ditto. * client.cc: Rearrange to build as less as possible if __INSIDE_CYGWIN__. (client_request::handle_request): Add Message Queue and Semaphore handling. * cygserver.cc: Rearrange to build as less as possible if __INSIDE_CYGWIN__. Use new debug/log/panic logging functions. (DEF_CONFIG_FILE): New definition for configuration file. Use throughout. (getfunc): Remove. (__cygserver__printf): Remove. (client_request_attach_tty::serve): Return error if impersonation fails. (print_usage): Pump up help message. (print_version): Add output of default configuration file. (main): Accommodate new options. Allow overwrite of threading options from config file. Call several new initialization functions. Drop printing dots. Don't define SIGHANDLE inline. * cygserver.conf: New file. * cygserver_process.h: Rename to process.h. * cygserver_transport.h: Rename to transport.h. * cygserver_transport_pipes.h: Rename to transport_pipes.h. * cygserver_transport_sockets.h: Rename to transport_sockets.h. * msg.cc: Rewrite. * sem.cc: Rewrite. * shm.cc: Rewrite. * sysv_msg.cc: New file, derived from FreeBSD version 1.52. * sysv_sem.cc: New file, derived from FreeBSD version 1.66. * sysv_shm.cc: New file, derived from FreeBSD version 1.89. * threaded_queue.cc: Rearrange to build as less as possible if __INSIDE_CYGWIN__. * transport.cc (transport_layer_base::impersonate_client): Define bool. (transport_layer_base::revert_to_self): Ditto. * transport.h (transport_layer_base::impersonate_client): Declare bool. (transport_layer_base::revert_to_self): Ditto. * transport_pipes.cc (transport_layer_pipes::transport_layer_pipes): Don't call init_security. (init_security): Remove. (transport_layer_pipes::accept): Use global sec_all_nih. (transport_layer_pipes::connect): Ditto. (transport_layer_pipes::impersonate_client): Define bool. (transport_layer_pipes::revert_to_self): Ditt. * transport_pipes.h (transport_layer_pipes::impersonate_client): Declare bool. (transport_layer_pipes::revert_to_self): Ditto. * woutsup.h: Include bsd compatibility headers. (SIGHANDLE): Add definition. (__cygserver__printf): Remove definition. (__noop_printf): Ditto. (debug_printf): Define using debug. (syscall_printf): Define using log. (system_printf): Ditto. Drop all other _printf definitions.