@@ -4487,7 +4487,7 @@ static void ggml_vk_buffer_write_2d(vk_buffer& dst, size_t offset, const void *
4487
4487
memcpy((uint8_t *)dst->ptr + offset + i * width, (const uint8_t *) src + i * spitch, width);
4488
4488
}
4489
4489
} else {
4490
- std::lock_guard<std::mutex > guard(dst->device->mutex);
4490
+ std::lock_guard<std::recursive_mutex > guard(dst->device->mutex);
4491
4491
4492
4492
vk_context subctx = ggml_vk_create_temporary_context(dst->device->transfer_queue.cmd_pool);
4493
4493
ggml_vk_ctx_begin(dst->device, subctx);
@@ -4578,7 +4578,7 @@ static void ggml_vk_buffer_read(vk_buffer& src, size_t offset, void * dst, size_
4578
4578
4579
4579
memcpy(dst, (uint8_t *) src->ptr + offset, size);
4580
4580
} else {
4581
- std::lock_guard<std::mutex > guard(src->device->mutex);
4581
+ std::lock_guard<std::recursive_mutex > guard(src->device->mutex);
4582
4582
4583
4583
vk_context subctx = ggml_vk_create_temporary_context(src->device->transfer_queue.cmd_pool);
4584
4584
ggml_vk_ctx_begin(src->device, subctx);
@@ -4608,7 +4608,7 @@ static void ggml_vk_buffer_copy_async(vk_context& ctx, vk_buffer& dst, size_t ds
4608
4608
4609
4609
static void ggml_vk_buffer_copy(vk_buffer& dst, size_t dst_offset, vk_buffer& src, size_t src_offset, size_t size) {
4610
4610
if (src->device == dst->device) {
4611
- std::lock_guard<std::mutex > guard(src->device->mutex);
4611
+ std::lock_guard<std::recursive_mutex > guard(src->device->mutex);
4612
4612
VK_LOG_DEBUG("ggml_vk_buffer_copy(SINGLE_DEVICE, " << size << ")");
4613
4613
// Copy within the device
4614
4614
vk_context subctx = ggml_vk_create_temporary_context(src->device->transfer_queue.cmd_pool);
@@ -4644,7 +4644,7 @@ static void ggml_vk_buffer_memset_async(vk_context& ctx, vk_buffer& dst, size_t
4644
4644
static void ggml_vk_buffer_memset(vk_buffer& dst, size_t offset, uint32_t c, size_t size) {
4645
4645
VK_LOG_DEBUG("ggml_vk_buffer_memset(" << offset << ", " << c << ", " << size << ")");
4646
4646
4647
- std::lock_guard<std::mutex > guard(dst->device->mutex);
4647
+ std::lock_guard<std::recursive_mutex > guard(dst->device->mutex);
4648
4648
vk_context subctx = ggml_vk_create_temporary_context(dst->device->transfer_queue.cmd_pool);
4649
4649
ggml_vk_ctx_begin(dst->device, subctx);
4650
4650
subctx->s->buffer.fillBuffer(dst->buffer, offset, size, c);
0 commit comments