server: Free client-side user handles at process exit.
This commit is contained in:
parent
09d1c52fa0
commit
538b24747c
|
@ -645,6 +645,7 @@ static void process_killed( struct process *process )
|
||||||
free( dll );
|
free( dll );
|
||||||
}
|
}
|
||||||
destroy_process_classes( process );
|
destroy_process_classes( process );
|
||||||
|
free_process_user_handles( process );
|
||||||
remove_process_locks( process );
|
remove_process_locks( process );
|
||||||
set_process_startup_state( process, STARTUP_ABORTED );
|
set_process_startup_state( process, STARTUP_ABORTED );
|
||||||
finish_process_tracing( process );
|
finish_process_tracing( process );
|
||||||
|
|
|
@ -166,10 +166,20 @@ void *next_user_handle( user_handle_t *handle, enum user_object type )
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* free client-side user handles managed by the process */
|
||||||
|
void free_process_user_handles( struct process *process )
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
for (i = 0; i < nb_handles; i++)
|
||||||
|
if (handles[i].type == USER_CLIENT && handles[i].ptr == process)
|
||||||
|
free_user_entry( &handles[i] );
|
||||||
|
}
|
||||||
|
|
||||||
/* allocate an arbitrary user handle */
|
/* allocate an arbitrary user handle */
|
||||||
DECL_HANDLER(alloc_user_handle)
|
DECL_HANDLER(alloc_user_handle)
|
||||||
{
|
{
|
||||||
reply->handle = alloc_user_handle( NULL, USER_CLIENT );
|
reply->handle = alloc_user_handle( current->process, USER_CLIENT );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -72,6 +72,7 @@ extern void *get_user_object_handle( user_handle_t *handle, enum user_object typ
|
||||||
extern user_handle_t get_user_full_handle( user_handle_t handle );
|
extern user_handle_t get_user_full_handle( user_handle_t handle );
|
||||||
extern void *free_user_handle( user_handle_t handle );
|
extern void *free_user_handle( user_handle_t handle );
|
||||||
extern void *next_user_handle( user_handle_t *handle, enum user_object type );
|
extern void *next_user_handle( user_handle_t *handle, enum user_object type );
|
||||||
|
extern void free_process_user_handles( struct process *process );
|
||||||
|
|
||||||
/* clipboard functions */
|
/* clipboard functions */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue