Jump to content

  • Log In with Google      Sign In   
  • Create Account

- - - - -

Error: Type is still used by function?


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
4 replies to this topic

#1 zexee   Members   -  Reputation: 118

Like
0Likes
Like

Posted 30 September 2013 - 10:55 AM

When engine is destructed, I got a error message saying "type string is still used by function erase". It seems that a the function is holding a reference to a type. It's true that the input parameter of function erase is string, but it never addref it.

 

What could be the problem?



Sponsor:

#2 Andreas Jonsson   Moderators   -  Reputation: 3343

Like
0Likes
Like

Posted 30 September 2013 - 11:26 AM

The addref was most likely done implicitly by the engine.

 

Are you using funcdefs? Are any of these passed to the application, if so are you releasing the function object after you're done with it?

 

Can you reproduce the problem with a test app and share it with me? If you can I can debug it to find out where the missing Release() should be.


AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game

#3 zexee   Members   -  Reputation: 118

Like
0Likes
Like

Posted 03 October 2013 - 10:02 PM

It is not easy to create a simple example, so I am trying to debug myself. I found it only happens on template object and the reason is that the template object is never released. No one calls ->Release() for the local variable so it is never deleted. I am not sure where it should be called, after function release or after context release? I am guessing that every function call is related to a context and when context releases all its local variable releases. According to the function name I think CleanStack is doing that but it is never called for successfully executed function. I am lost. Would you point me out the way where to look at?

 

Plus, I didn't use funcdefs, I just compile a script into a module and run one function of it. I only explicitly create one context for running function and get one function from the module. I am sure this two things are correctly released.


Edited by zexee, 03 October 2013 - 10:07 PM.


#4 zexee   Members   -  Reputation: 118

Like
0Likes
Like

Posted 04 October 2013 - 06:31 AM

I found my bug! I tried to use inherited reference_count class and put AddRef and Release in the base class. Therefore the function address is for the base class and when call them with the address of the derived class as object using this_call, the function will consider it as the address of the base class and it cannot find the correct reference counter variable.

 

So I cannot register any function of the base class if the inheritance is not trivial.



#5 Andreas Jonsson   Moderators   -  Reputation: 3343

Like
0Likes
Like

Posted 04 October 2013 - 07:16 AM

That's good to know.

 

If you use inhereted reference_count then make sure to declare the AddRef and Release methods as virtual. And when registering these methods for the derived class make sure you take the address of the method as they appear in the derived class. Example:

 

class RefCount
{
public:
  virtual void AddRef();
  virtual void Release();
};
 
class Derived : public RefCount
{
public:
  static void Register(asIScriptEngine *engine)
  {
     engine->RegisterObjectType("Derived", 0, asOBJ_REF);
     engine->RegisterObectBehaviour("Derived", asBEHAVE_ADDREF, asMETHOD(Derived,AddRef), asCALL_THISCALL);
     engine->RegisterObjectBehaviour("Derived", asBEHAVE_RELEASE, asMETHOD(Derived,Release), asCALL_THISCALL);
  }
};
 

 

This will make sure that AngelScript use the correct object pointer when calling the class methods.

 

Regards,

Andreas


AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS