From: Max TenEyck Woodbury max+git@mtew.isa-geek.net
I was getting mystery frozen processes that cleared when a total screen redraw was forced. This has been reported numerous times over several years. It came and went with various releases. I have been getting it consistantly recently. I had an idea that it might have something to do with partially uninitialized drawing data structures, so I started adding HEAP_ZERO_MEMORY flags in various places. This particular set cleared the problem, at least for now...
diff --git a/dlls/wined3d/vertexdeclaration.c b/dlls/wined3d/vertexdeclaration.c index cf5378c..cf1c814 100644 --- a/dlls/wined3d/vertexdeclaration.c +++ b/dlls/wined3d/vertexdeclaration.c @@ -178,7 +178,8 @@ static HRESULT vertexdeclaration_init(struct wined3d_vertex_declaration *declara declaration->parent = parent; declaration->parent_ops = parent_ops; declaration->device = device; - declaration->elements = HeapAlloc(GetProcessHeap(), 0, sizeof(*declaration->elements) * element_count); + declaration->elements = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, + sizeof(*declaration->elements) * element_count); if (!declaration->elements) { ERR("Failed to allocate elements memory.\n"); @@ -316,7 +317,7 @@ static unsigned int convert_fvf_to_declaration(const struct wined3d_gl_info *gl_ has_psize + has_diffuse + has_specular + num_textures;
state.gl_info = gl_info; - state.elements = HeapAlloc(GetProcessHeap(), 0, size * sizeof(*state.elements)); + state.elements = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size * sizeof(*state.elements)); if (!state.elements) return ~0U; state.offset = 0; state.idx = 0;