diff options
| author | Ben Skeggs <bskeggs@redhat.com> | 2009-03-25 12:09:58 +1000 | 
|---|---|---|
| committer | Ben Skeggs <bskeggs@redhat.com> | 2009-03-25 12:09:58 +1000 | 
| commit | 88b19bbe651e4362d0bc96eb6ec10218c2ef6cf2 (patch) | |
| tree | 37937c61db1b51743105d24fed1eeb819fdbef01 /src/gallium/drivers | |
| parent | 0be8af8a392541acde3f8791a754a260b877ac17 (diff) | |
nouveau: fix some pipe_buffer reference counting issues
Diffstat (limited to 'src/gallium/drivers')
| -rw-r--r-- | src/gallium/drivers/nouveau/nouveau_stateobj.h | 6 | 
1 files changed, 5 insertions, 1 deletions
| diff --git a/src/gallium/drivers/nouveau/nouveau_stateobj.h b/src/gallium/drivers/nouveau/nouveau_stateobj.h index 97859110b5..a54820e851 100644 --- a/src/gallium/drivers/nouveau/nouveau_stateobj.h +++ b/src/gallium/drivers/nouveau/nouveau_stateobj.h @@ -46,9 +46,12 @@ static INLINE void  so_ref(struct nouveau_stateobj *ref, struct nouveau_stateobj **pso)  {  	struct nouveau_stateobj *so = *pso; +	int i;          if (pipe_reference((struct pipe_reference**)pso, &ref->reference)) {  		free(so->push); +		for (i = 0; i < so->cur_reloc; i++) +			pipe_buffer_reference(&so->reloc[i].bo, NULL);  		free(so->reloc);  		free(so);  	} @@ -83,7 +86,8 @@ so_reloc(struct nouveau_stateobj *so, struct pipe_buffer *bo,  {  	struct nouveau_stateobj_reloc *r = &so->reloc[so->cur_reloc++]; -	r->bo = bo; +	r->bo = NULL; +	pipe_buffer_reference(&r->bo, bo);  	r->offset = so->cur - so->push;  	r->packet = so->cur_packet;  	r->data = data; | 
