mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-12-26 11:17:44 +01:00
[mpp_buffer]: Fix error on buffer group reset
At buffer create stage and ref_count is still zero if buffer group reset happens the just created buffer will be marked discard and cause error. Change-Id: Idc163f81edd055d8cc33ce6d80ca041adc973878 Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com> Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
This commit is contained in:
parent
825467160e
commit
2204012fb3
1 changed files with 20 additions and 8 deletions
|
|
@ -385,11 +385,20 @@ MPP_RET mpp_buffer_create(const char *tag, const char *caller,
|
|||
pthread_mutex_lock(&group->buf_lock);
|
||||
p->buffer_id = group->buffer_id++;
|
||||
INIT_LIST_HEAD(&p->list_status);
|
||||
list_add_tail(&p->list_status, &group->list_unused);
|
||||
|
||||
if (buffer) {
|
||||
p->ref_count++;
|
||||
p->used = 1;
|
||||
list_add_tail(&p->list_status, &group->list_used);
|
||||
group->count_used++;
|
||||
*buffer = p;
|
||||
} else {
|
||||
list_add_tail(&p->list_status, &group->list_unused);
|
||||
group->count_unused++;
|
||||
}
|
||||
|
||||
group->usage += info->size;
|
||||
group->buffer_count++;
|
||||
group->count_unused++;
|
||||
pthread_mutex_unlock(&group->buf_lock);
|
||||
|
||||
buf_add_log(p, (group->mode == MPP_BUFFER_INTERNAL) ? (BUF_CREATE) : (BUF_COMMIT), caller);
|
||||
|
|
@ -397,11 +406,6 @@ MPP_RET mpp_buffer_create(const char *tag, const char *caller,
|
|||
if (group->mode == MPP_BUFFER_INTERNAL)
|
||||
MppBufferService::get_instance()->inc_total(info->size);
|
||||
|
||||
if (buffer) {
|
||||
inc_buffer_ref(p, caller);
|
||||
*buffer = p;
|
||||
}
|
||||
|
||||
if (group->callback)
|
||||
group->callback(group->arg, group);
|
||||
RET:
|
||||
|
|
@ -498,7 +502,15 @@ MppBufferImpl *mpp_buffer_get_unused(MppBufferGroupImpl *p, size_t size)
|
|||
size, pos->buffer_id, pos->info.size);
|
||||
if (pos->info.size >= size) {
|
||||
buffer = pos;
|
||||
inc_buffer_ref(buffer, __FUNCTION__);
|
||||
pthread_mutex_lock(&buffer->lock);
|
||||
buf_add_log(buffer, BUF_REF_INC, __FUNCTION__);
|
||||
buffer->ref_count++;
|
||||
buffer->used = 1;
|
||||
list_del_init(&buffer->list_status);
|
||||
list_add_tail(&buffer->list_status, &p->list_used);
|
||||
p->count_used++;
|
||||
p->count_unused--;
|
||||
pthread_mutex_unlock(&buffer->lock);
|
||||
found = 1;
|
||||
break;
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue