From 038c71f10c12a60698a801a95321e874e30e50d4 Mon Sep 17 00:00:00 2001 From: Robert Collins Date: Mon, 4 Mar 2002 08:12:53 +0000 Subject: 2002-03-04 Robert Collins * cygserver_shm.cc (client_request_shm::serve): Implement SHM_DETACH. * shm.cc (shmdt): Implement. --- winsup/cygserver/shm.cc | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'winsup/cygserver') diff --git a/winsup/cygserver/shm.cc b/winsup/cygserver/shm.cc index de3e61e4e..50ca42e0e 100644 --- a/winsup/cygserver/shm.cc +++ b/winsup/cygserver/shm.cc @@ -290,6 +290,26 @@ client_request_shm::serve (transport_layer_base * conn, process_cache * cache) return; } + /* Someone detached */ + if (parameters.in.type == SHM_DETACH) + { + shmnode *tempnode = shm_head; + while (tempnode) + { + if (tempnode->shm_id == parameters.in.shm_id) + { + InterlockedDecrement (&tempnode->shmds->shm_nattch); + header.error_code = 0; + CloseHandle (token_handle); + return; + } + tempnode = tempnode->next; + } + header.error_code = EINVAL; + CloseHandle (token_handle); + return; + } + /* Someone wants the ID removed. */ if (parameters.in.type == SHM_DEL) { -- cgit v1.2.3