u_threaded_context: fix a memory leak
The uploaders can own transfers which need to be unmapped. Destroy them before the final sync (they're not used from the driver thread anyway) so that the transfer_unmap call is processed by the driver. Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
76fcede3f4
commit
1b592d30c5
|
@ -2233,6 +2233,13 @@ tc_destroy(struct pipe_context *_pipe)
|
|||
struct threaded_context *tc = threaded_context(_pipe);
|
||||
struct pipe_context *pipe = tc->pipe;
|
||||
|
||||
if (tc->base.const_uploader &&
|
||||
tc->base.stream_uploader != tc->base.const_uploader)
|
||||
u_upload_destroy(tc->base.const_uploader);
|
||||
|
||||
if (tc->base.stream_uploader)
|
||||
u_upload_destroy(tc->base.stream_uploader);
|
||||
|
||||
tc_sync(tc);
|
||||
|
||||
if (util_queue_is_initialized(&tc->queue)) {
|
||||
|
@ -2242,14 +2249,8 @@ tc_destroy(struct pipe_context *_pipe)
|
|||
util_queue_fence_destroy(&tc->batch_slots[i].fence);
|
||||
}
|
||||
|
||||
if (tc->base.const_uploader &&
|
||||
tc->base.stream_uploader != tc->base.const_uploader)
|
||||
u_upload_destroy(tc->base.const_uploader);
|
||||
|
||||
if (tc->base.stream_uploader)
|
||||
u_upload_destroy(tc->base.stream_uploader);
|
||||
|
||||
slab_destroy_child(&tc->pool_transfers);
|
||||
assert(tc->batch_slots[tc->next].num_total_call_slots == 0);
|
||||
pipe->destroy(pipe);
|
||||
os_free_aligned(tc);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue