Make VIRTUAL_SetFaultHandler an internal function

Rob Shearman rob at codeweavers.com
Sun Apr 17 08:44:57 CDT 2005


Dimitrie O. Paun wrote:

>On Thu, Apr 14, 2005 at 03:05:36PM +0200, Alexandre Julliard wrote:
>  
>
>>Actually it should be possible to handle the fault using a vectored
>>handler, without requiring internal functions at all.
>>    
>>
>
>Completely untested (what do people use to test DIB handling?),
>but it compiles. Is something like this what you had it mind?
>
>  
>

>+/***********************************************************************
>+ *           mem_area_add
>+ *
>+ * Adds a memory area to the list.
>+ *
>+ * PARAMS
>+ *      base  [I] Beginning address of the area
>+ *      size  [I] Size of the area
>+ *      data  [I] Data associated with the area
>+ *
>+ */
>+static struct mem_area *mem_area_add( const void *base, UINT size, void *data )
>+{
>+    struct mem_area *area;
>+
>+    EnterCriticalSection( &csMemAreas );
>+
>+    area = HeapAlloc(GetProcessHeap(), 0, sizeof(*area));
>  
>

You can put the HeapAlloc outside of the critical section.

>+    if (area)
>+    {
>+        area->base = base;
>+        area->size = size;
>+        area->data = data;
>+        list_add_head( &mem_areas_list, &area->entry );
>+    }
>+
>+    LeaveCriticalSection( &csMemAreas );
>+
>+    return area;
>+}
>+
>+
>+/***********************************************************************
>+ *           mem_area_del
>+ *
>+ * Removes a memory area from the list.
>+ *
>+ * PARAMS
>+ *      addr  [I] Address
>+ *
>+ * RETURNS
>+ *      Success: TRUE
>+ *      Failure: FALSE
>+ */
>+static BOOL mem_area_del( const void *addr )
>+{
>+    struct mem_area *area;
>+
>+    EnterCriticalSection( &csMemAreas );
>+    area = mem_area_find( addr );
>+    if (area) list_remove( &area->entry );
>+    LeaveCriticalSection( &csMemAreas );
>  
>

Why don't you free area here?

>+
>+    return area != NULL;
>+}
>+
>+
> /* 
>   Some of the following helper functions are duplicated in
>   dlls/gdi/dib.c
>  
>

Rob



More information about the wine-devel mailing list