[PATCH 2/4] server: Add function to count only valid handles in a process

Austin Lund austin.lund at gmail.com
Sun Jun 19 21:15:39 CDT 2011


---
 server/handle.c  |   11 ++++++++++-
 server/handle.h  |    1 +
 server/process.c |    2 +-
 3 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/server/handle.c b/server/handle.c
index 2aaec37..31ee83c 100644
--- a/server/handle.c
+++ b/server/handle.c
@@ -461,7 +461,7 @@ obj_handle_t enumerate_handles( struct process *process, const struct object_ops
     for (i = *index, entry = &table->entries[i]; i <= table->last; i++, entry++)
     {
         if (!entry->ptr) continue;
-        if (entry->ptr->ops != ops) continue;
+        if (ops && (entry->ptr->ops != ops)) continue;
         *index = i + 1;
         return index_to_handle(i);
     }
@@ -560,6 +560,15 @@ unsigned int get_handle_table_count( struct process *process )
     return process->handles->count;
 }
 
+unsigned int count_valid_handles( struct process *process )
+{
+    unsigned int i, count;
+    i = count = 0;
+    while (enumerate_handles(process, NULL, &i) != 0)
+        count++;
+    return count;
+}
+
 /* close a handle */
 DECL_HANDLER(close_handle)
 {
diff --git a/server/handle.h b/server/handle.h
index 821c4ef..0e76eb1 100644
--- a/server/handle.h
+++ b/server/handle.h
@@ -53,5 +53,6 @@ extern void close_process_handles( struct process *process );
 extern struct handle_table *alloc_handle_table( struct process *process, int count );
 extern struct handle_table *copy_handle_table( struct process *process, struct process *parent );
 extern unsigned int get_handle_table_count( struct process *process);
+extern unsigned int count_valid_handles( struct process *process );
 
 #endif  /* __WINE_SERVER_HANDLE_H */
diff --git a/server/process.c b/server/process.c
index c88c89b..540bf7f 100644
--- a/server/process.c
+++ b/server/process.c
@@ -846,7 +846,7 @@ struct process_snapshot *process_snap( int *count )
         ptr->threads  = process->running_threads;
         ptr->count    = process->obj.refcount;
         ptr->priority = process->priority;
-        ptr->handles  = get_handle_table_count(process);
+        ptr->handles  = count_valid_handles(process);
         grab_object( process );
         ptr++;
     }
-- 
1.7.4.1




More information about the wine-patches mailing list