diff --git a/.pick_status.json b/.pick_status.json index dee7c490725..a27948a5eac 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1684,7 +1684,7 @@ "description": "r300: fix memory leaks when register allocation fails", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "54f6e72b27154219be237690453bb9c3b57cd3ec", "notes": null diff --git a/src/gallium/drivers/r300/compiler/r3xx_vertprog.c b/src/gallium/drivers/r300/compiler/r3xx_vertprog.c index a02147a8244..00b9928164a 100644 --- a/src/gallium/drivers/r300/compiler/r3xx_vertprog.c +++ b/src/gallium/drivers/r300/compiler/r3xx_vertprog.c @@ -689,6 +689,7 @@ static void allocate_temporary_registers(struct radeon_compiler *c, void *user) if (!ra_allocate(graph)) { rc_error(c, "Ran out of hardware temporaries\n"); + ralloc_free(graph); return; } diff --git a/src/gallium/drivers/r300/compiler/radeon_pair_regalloc.c b/src/gallium/drivers/r300/compiler/radeon_pair_regalloc.c index e7cabfa9d24..5f947678453 100644 --- a/src/gallium/drivers/r300/compiler/radeon_pair_regalloc.c +++ b/src/gallium/drivers/r300/compiler/radeon_pair_regalloc.c @@ -357,6 +357,7 @@ static void do_advanced_regalloc(struct regalloc_state * s) if (!ra_allocate(graph)) { rc_error(s->C, "Ran out of hardware temporaries\n"); + ralloc_free(graph); return; } diff --git a/src/gallium/drivers/r300/r300_fs.c b/src/gallium/drivers/r300/r300_fs.c index 5300c8bf047..6ce0eabdf92 100644 --- a/src/gallium/drivers/r300/r300_fs.c +++ b/src/gallium/drivers/r300/r300_fs.c @@ -525,6 +525,7 @@ static void r300_translate_fragment_shader( abort(); } + free(compiler.code->constants.Constants); rc_destroy(&compiler.Base); r300_dummy_fragment_shader(r300, shader); return;