Invoke garbage collector?
Johannes Pfau
spam at example.com
Thu Feb 10 06:06:08 PST 2011
Sean Eskapp wrote:
>I'm having an unfortunate DSFML issue, where failing to free objects
>like Images or Sprites causes exceptions to eventually be thrown.
>Calling the built-in member dispose() causes access violations, so I
>assume it's not for programmer use.
>
>However, I need the resources to be freed more quickly than the GC is
>apparently doing (I assume the Images and Sprites are eventually
>cleaned up), so is there a way to invoke a GC cleanup in some way?
I don't think that invoking the garbage collector is a good solution in
this case. "dispose" is indeed defined as "protected", so you probably
should not call it manually, but then there really should be a public
dispose like function. The reason for the crashes when calling
dispose manually is simple: dispose calls a c sfml function to release c
resources. The destructor calls dispose again, dispose tries to free an
invalid pointer -> crash. So what should probably be done is to define a
private m_disposed member and only call dispose if it hasn't been called
before. Try to add this code to the DSFMLObject class in
dsfml/system/common.d:
-------------------------------------
private:
bool m_disposed = false;
public:
final void releaseRessources() //Needs a better name, though
{
if(m_disposed)
return;
dispose();
m_disposed = true;
}
-------------------------------------
And change dispose() in the DSFmLObject ~this() to releaseRessources();
(Crashes might still occur if dispose is called directly. In the end,
this might need a little more thinking, but that's up to the DSFML
authors ;-))
--
Johannes Pfau
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.puremagic.com/pipermail/digitalmars-d-learn/attachments/20110210/4420f5f9/attachment-0001.pgp>
More information about the Digitalmars-d-learn
mailing list