2002-03-04 Robert Collins <rbtcollins@hotmail.com>
* cygserver_shm.cc (delete_shmnode): New function. (client_request_shm::serve): Use it.
This commit is contained in:
parent
038c71f10c
commit
7c3617cc0a
@ -170,6 +170,35 @@ static long
|
|||||||
new_private_key =
|
new_private_key =
|
||||||
0;
|
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
|
void
|
||||||
client_request_shm::serve (transport_layer_base * conn, process_cache * cache)
|
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;
|
deleted_head = temp2;
|
||||||
|
|
||||||
// FIXME: when/where do we delete the handles?
|
// 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;
|
header.error_code = 0;
|
||||||
CloseHandle (token_handle);
|
CloseHandle (token_handle);
|
||||||
|
@ -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>
|
2002-03-04 Robert Collins <rbtcollins@hotmail.com>
|
||||||
|
|
||||||
* cygserver_shm.cc (client_request_shm::serve): Implement SHM_DETACH.
|
* cygserver_shm.cc (client_request_shm::serve): Implement SHM_DETACH.
|
||||||
|
@ -170,6 +170,35 @@ static long
|
|||||||
new_private_key =
|
new_private_key =
|
||||||
0;
|
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
|
void
|
||||||
client_request_shm::serve (transport_layer_base * conn, process_cache * cache)
|
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;
|
deleted_head = temp2;
|
||||||
|
|
||||||
// FIXME: when/where do we delete the handles?
|
// 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;
|
header.error_code = 0;
|
||||||
CloseHandle (token_handle);
|
CloseHandle (token_handle);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user