Alexandre Julliard : server: Keep permanent objects on the standard object list.
Alexandre Julliard
julliard at winehq.org
Wed Sep 23 15:47:14 CDT 2020
Module: wine
Branch: master
Commit: 3b3c8619c852513f57ce7388557c8451691fbe00
URL: https://source.winehq.org/git/wine.git/?a=commit;h=3b3c8619c852513f57ce7388557c8451691fbe00
Author: Alexandre Julliard <julliard at winehq.org>
Date: Wed Sep 23 15:34:10 2020 +0200
server: Keep permanent objects on the standard object list.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
server/object.c | 47 ++++++-----------------------------------------
server/object.h | 5 +++--
2 files changed, 9 insertions(+), 43 deletions(-)
diff --git a/server/object.c b/server/object.c
index 27c1aa58ad..77dec733a5 100644
--- a/server/object.c
+++ b/server/object.c
@@ -52,22 +52,13 @@ struct namespace
#ifdef DEBUG_OBJECTS
static struct list object_list = LIST_INIT(object_list);
-static struct list static_object_list = LIST_INIT(static_object_list);
void dump_objects(void)
{
- struct list *p;
+ struct object *ptr;
- LIST_FOR_EACH( p, &static_object_list )
- {
- struct object *ptr = LIST_ENTRY( p, struct object, obj_list );
- fprintf( stderr, "%p:%d: ", ptr, ptr->refcount );
- dump_object_name( ptr );
- ptr->ops->dump( ptr, 1 );
- }
- LIST_FOR_EACH( p, &object_list )
+ LIST_FOR_EACH_ENTRY( ptr, &object_list, struct object, obj_list )
{
- struct object *ptr = LIST_ENTRY( p, struct object, obj_list );
fprintf( stderr, "%p:%d: ", ptr, ptr->refcount );
dump_object_name( ptr );
ptr->ops->dump( ptr, 1 );
@@ -76,17 +67,11 @@ void dump_objects(void)
void close_objects(void)
{
- struct list *ptr;
+ struct object *obj, *obj2;
- /* release the static objects */
- while ((ptr = list_head( &static_object_list )))
- {
- struct object *obj = LIST_ENTRY( ptr, struct object, obj_list );
- /* move it back to the standard list before freeing */
- list_remove( &obj->obj_list );
- list_add_head( &object_list, &obj->obj_list );
- release_object( obj );
- }
+ /* release the permanent objects */
+ LIST_FOR_EACH_ENTRY_SAFE( obj, obj2, &object_list, struct object, obj_list )
+ if (obj->is_permanent) release_object( obj );
dump_objects(); /* dump any remaining objects */
}
@@ -406,26 +391,6 @@ void unlink_named_object( struct object *obj )
free( name_ptr );
}
-/* mark an object as being permanent, i.e. only released at shutdown */
-void make_object_permanent( struct object *obj )
-{
- obj->is_permanent = 1;
-#ifdef DEBUG_OBJECTS
- list_remove( &obj->obj_list );
- list_add_head( &static_object_list, &obj->obj_list );
-#endif
-}
-
-/* mark an object as no longer permanent */
-void make_object_temporary( struct object *obj )
-{
- obj->is_permanent = 0;
-#ifdef DEBUG_OBJECTS
- list_remove( &obj->obj_list );
- list_add_head( &object_list, &obj->obj_list );
-#endif
-}
-
/* grab an object (i.e. increment its refcount) and return the object */
struct object *grab_object( void *ptr )
{
diff --git a/server/object.h b/server/object.h
index f8a3a971d6..394a4aac46 100644
--- a/server/object.h
+++ b/server/object.h
@@ -145,8 +145,6 @@ extern void *create_named_object( struct object *parent, const struct object_ops
extern void *open_named_object( struct object *parent, const struct object_ops *ops,
const struct unicode_str *name, unsigned int attributes );
extern void unlink_named_object( struct object *obj );
-extern void make_object_permanent( struct object *obj );
-extern void make_object_temporary( struct object *obj );
extern struct namespace *create_namespace( unsigned int hash_size );
extern void free_kernel_objects( struct object *obj );
/* grab/release_object can take any pointer, but you better make sure */
@@ -180,6 +178,9 @@ extern void dump_objects(void);
extern void close_objects(void);
#endif
+static inline void make_object_permanent( struct object *obj ) { obj->is_permanent = 1; }
+static inline void make_object_temporary( struct object *obj ) { obj->is_permanent = 0; }
+
/* event functions */
struct event;
More information about the wine-cvs
mailing list