]> sourceware.org Git - newlib-cygwin.git/commitdiff
2002-03-04 Robert Collins <rbtcollins@hotmail.com>
authorRobert Collins <rbtcollins@hotmail.com>
Mon, 4 Mar 2002 08:45:40 +0000 (08:45 +0000)
committerRobert Collins <rbtcollins@hotmail.com>
Mon, 4 Mar 2002 08:45:40 +0000 (08:45 +0000)
        * cygserver_shm.cc (delete_shmnode): New function.
        (client_request_shm::serve): Use it.

winsup/cygserver/shm.cc
winsup/cygwin/ChangeLog
winsup/cygwin/cygserver_shm.cc

index 50ca42e0eaa22e3c4ee0f9d218493f1bfe18c702..97f05f9d96c8fe14d017a17b4611327f84eb44ca 100644 (file)
@@ -170,6 +170,35 @@ static long
   new_private_key =
   0;
 
+static void
+delete_shmnode (shmnode **nodeptr)
+{
+  shmnode *node = *nodeptr;
+
+  // remove from the list
+  if (node == shm_head)
+    shm_head = shm_head->next;
+  else
+    {
+      shmnode *tempnode = shm_head;
+      while (tempnode && tempnode->next != node)
+        tempnode = tempnode->next;
+      if (tempnode)
+        tempnode->next = node->next;
+      // else log the unexpected !
+    }
+
+    // release the shared data view
+    UnmapViewOfFile (node->shmds->mapptr);
+    delete node->shmds;
+    CloseHandle (node->filemap);
+    CloseHandle (node->attachmap);
+
+    // free the memory
+    delete node;
+    nodeptr = NULL;
+}
+  
 void
 client_request_shm::serve (transport_layer_base * conn, process_cache * cache)
 {
@@ -326,6 +355,14 @@ client_request_shm::serve (transport_layer_base * conn, process_cache * cache)
                deleted_head = temp2;
 
                // FIXME: when/where do we delete the handles?
+               if (temp2->shmds->shm_nattch)
+                 {
+                   // FIXME: add to a pending queue?
+                 }
+               else
+                 {
+                   delete_shmnode (&temp2);
+                 }
                
                header.error_code = 0;
                CloseHandle (token_handle);
index 4b3436f61263f91e3121244c3463da8f789272af..a76a1b97e3c4e8e8d53dd3b12c1e1dcd8f3663dc 100644 (file)
@@ -1,3 +1,8 @@
+2002-03-04  Robert Collins  <rbtcollins@hotmail.com>
+
+       * cygserver_shm.cc (delete_shmnode): New function.
+       (client_request_shm::serve): Use it.
+
 2002-03-04  Robert Collins  <rbtcollins@hotmail.com>
 
        * cygserver_shm.cc (client_request_shm::serve): Implement SHM_DETACH.
index 50ca42e0eaa22e3c4ee0f9d218493f1bfe18c702..97f05f9d96c8fe14d017a17b4611327f84eb44ca 100755 (executable)
@@ -170,6 +170,35 @@ static long
   new_private_key =
   0;
 
+static void
+delete_shmnode (shmnode **nodeptr)
+{
+  shmnode *node = *nodeptr;
+
+  // remove from the list
+  if (node == shm_head)
+    shm_head = shm_head->next;
+  else
+    {
+      shmnode *tempnode = shm_head;
+      while (tempnode && tempnode->next != node)
+        tempnode = tempnode->next;
+      if (tempnode)
+        tempnode->next = node->next;
+      // else log the unexpected !
+    }
+
+    // release the shared data view
+    UnmapViewOfFile (node->shmds->mapptr);
+    delete node->shmds;
+    CloseHandle (node->filemap);
+    CloseHandle (node->attachmap);
+
+    // free the memory
+    delete node;
+    nodeptr = NULL;
+}
+  
 void
 client_request_shm::serve (transport_layer_base * conn, process_cache * cache)
 {
@@ -326,6 +355,14 @@ client_request_shm::serve (transport_layer_base * conn, process_cache * cache)
                deleted_head = temp2;
 
                // FIXME: when/where do we delete the handles?
+               if (temp2->shmds->shm_nattch)
+                 {
+                   // FIXME: add to a pending queue?
+                 }
+               else
+                 {
+                   delete_shmnode (&temp2);
+                 }
                
                header.error_code = 0;
                CloseHandle (token_handle);
This page took 0.03822 seconds and 5 git commands to generate.