Refcounting?
Eero Tamminen
eero.tamminen at netsonic.fi
Thu Dec 30 13:51:39 EST 2004
Hi,
I'll CC these to the list, these might interest others too.
> I added a check for double calls to refcount() on the same object,
> if REFCOUNT_DEBUG is defined. It found a bug in bird.c where you use
> refcount(). Actually all sprites are automatically
> refcounted, so you never have to use refcount() when dealing with
> them, only ref() and deref().
Ok. I removed the refcounting from bird and added an option for the
debugging to the Makefile (on by default).
> > Btw. why deref() always returns zero, didn't the
> > earlier sprite_release return the refenced object if something was
> > still referencing it and the sprite was still alive?
>
> Yes, I now like the "ideom"
> p = deref(p);
> to dereference *p. Then deref should always return 0, so that we know
> that p is no longer a valid pointer. Anyway if we release the reference
> we should not try to access the object any more.
>
>
> > There's one strange thing in bonus.c:
> > - You changed sprite_kill(s) to refkill(s) and when I looked into
> > sprite_kill() function, that indeed only calls refkill(). My
> > question is: - Does sprite now get the MSG_KILL always when it's
> > destroyed?
>
> It should send MSG_KILL indeed. I wonder if it does though.. I don't
> have the code on this machine, but I will check.
sprite_kill() doesn't do anything else except refkill(). refkill() doesn't
know anything about sprites...
> > The reason why I ask is that the sprite should deref the referenced
> > sprite before dying... See bonus_free() and bonus_sigget() in the
> > new sprites/bonus.c.
>
> Yes, you are right.
Do you mean that the sprite_kill function would be removed from the sprite
struct and replaced with handling of the MSG_KILL function?
If sprite creation does refcount automatically, then killing sprite should
call deref (or refkill?) which also frees the sprite I think. I guess
MSG_KILL handler should then do that... If sprite has some extra allocations
it needs to free them before doing deref(), right?
- Eero
More information about the airstrike
mailing list