浏览代码

pipebuffer: Ensure refcounts of live buffer objects are never zero.

tags/mesa_20090313
José Fonseca 17 年前
父节点
当前提交
28a2edb738
共有 2 个文件被更改,包括 13 次插入5 次删除
  1. 12
    3
      src/gallium/auxiliary/pipebuffer/pb_buffer.h
  2. 1
    2
      src/gallium/auxiliary/pipebuffer/pb_bufmgr_fenced.c

+ 12
- 3
src/gallium/auxiliary/pipebuffer/pb_buffer.h 查看文件

@@ -177,12 +177,16 @@ pb_get_base_buffer( struct pb_buffer *buf,
}


/**
* Don't call this directly. Use pb_reference instead.
*/
static INLINE void
pb_destroy(struct pb_buffer *buf)
{
assert(buf);
if(!buf)
return;
assert(buf->base.refcount == 0);
buf->vtbl->destroy(buf);
}

@@ -193,11 +197,16 @@ static INLINE void
pb_reference(struct pb_buffer **dst,
struct pb_buffer *src)
{
if (src)
if (src) {
assert(src->base.refcount);
src->base.refcount++;
}

if (*dst && --(*dst)->base.refcount == 0)
pb_destroy( *dst );
if (*dst) {
assert((*dst)->base.refcount);
if(--(*dst)->base.refcount == 0)
pb_destroy( *dst );
}

*dst = src;
}

+ 1
- 2
src/gallium/auxiliary/pipebuffer/pb_bufmgr_fenced.c 查看文件

@@ -86,8 +86,7 @@ fenced_bufmgr_create_buffer(struct pb_manager *mgr,
fenced_buf = fenced_buffer_create(fenced_mgr->fenced_list, buf);
if(!fenced_buf) {
assert(buf->base.refcount == 1);
pb_destroy(buf);
pb_reference(&buf, NULL);
}
return fenced_buf;

正在加载...
取消
保存