Jump to content
  • Advertisement
Sign in to follow this  
noizex

Crash When Trying To Store Weakref In An Array

This topic is 787 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I seem to have some problems with weakref, first I couldn't even pass it to a function, now I tried storing it in an array and it just crashes. Maybe it wasn't designed to be stored like this (though it makes perfect sense to me), but I don't think it should crash so hard. The code to reproduce it looks like this:

 

class foo
{
}
 
int main()
{
    array<weakref<foo>> arr;
    
    foo f();
    arr.push_back(weakref<foo>(f));  
    return 1;
}
 
It crashes on push_back, I tried first initializing weakref<foo>, then passing it both by value or reference, always crashed. Here is the callstack:
 
Program received signal SIGSEGV, Segmentation fault.
0x0000000000488799 in asCScriptEngine::CallGlobalFunctionRetPtr (this=0x7f5c20, i=0x0, s=0x82d710, param1=0x850380) at ../angelscript/angelscript/source/as_scriptengine.cpp:4363
4363            if( i->callConv == ICC_CDECL )
 
#0  0x0000000000488799 in asCScriptEngine::CallGlobalFunctionRetPtr (this=0x7f5c20, i=0x0, s=0x82d710, param1=0x850380) at ../angelscript/angelscript/source/as_scriptengine.cpp:4363
#1  0x0000000000488661 in asCScriptEngine::CallGlobalFunctionRetPtr (this=0x7f5c20, func=399, param1=0x850380) at ../angelscript/angelscript/source/as_scriptengine.cpp:4336
#2  0x000000000048a1ad in asCScriptEngine::CreateScriptObject (this=0x7f5c20, type=0x850380) at ../angelscript/angelscript/source/as_scriptengine.cpp:4935
#3  0x00000000004373b3 in CScriptArray::Construct (this=0x828fb0, buf=0x836300, start=0, end=1) at ../angelscript/add_on/scriptarray/scriptarray.cpp:951
#4  0x0000000000436f3b in CScriptArray::Resize (this=0x828fb0, delta=1, at=0) at ../angelscript/add_on/scriptarray/scriptarray.cpp:718
#5  0x0000000000437502 in CScriptArray::InsertAt (this=0x828fb0, index=0, value=0x855b98) at ../angelscript/add_on/scriptarray/scriptarray.cpp:793
#6  0x0000000000437829 in CScriptArray::InsertLast (this=0x828fb0, value=0x855b98) at ../angelscript/add_on/scriptarray/scriptarray.cpp:856
#7  0x00000000004cfdf8 in X64_CallFunction (args=0x7fffffffd8e0, cnt=0, func=0x437800 <CScriptArray::InsertLast(void*)>, retQW2=@0x7fffffffdb08: 0, returnFloat=false)
    at ../angelscript/angelscript/source/as_callfunc_x64_gcc.cpp:162
#8  0x00000000004d09db in CallSystemFunctionNative (context=0x8281c0, descr=0x845500, obj=0x828fb0, args=0x855b8c, retPointer=0x0, retQW2=@0x7fffffffdb08: 0, secondObject=0x0)
    at ../angelscript/angelscript/source/as_callfunc_x64_gcc.cpp:468
#9  0x00000000004cf759 in CallSystemFunction (id=425, context=0x8281c0) at ../angelscript/angelscript/source/as_callfunc.cpp:712
#10 0x0000000000460a79 in asCContext::ExecuteNext (this=0x8281c0) at ../angelscript/angelscript/source/as_context.cpp:2514
#11 0x000000000045db1f in asCContext::Execute (this=0x8281c0) at ../angelscript/angelscript/source/as_context.cpp:1296
#12 0x0000000000450cd6 in CContextMgr::ExecuteScripts (this=0x80e790) at ../angelscript/add_on/contextmgr/contextmgr.cpp:177
#13 0x0000000000407cce in ExecuteScript (engine=0x7f5c20, scriptFile=0x54740d "arr_weakref.as", debug=false) at ../game/main.cpp:522
#14 0x0000000000406d36 in main (argc=1, argv=0x7fffffffe5e8) at ../game/main.cpp:126
 

Unfortunately this goes beyond my ability to debug Angelscript so I just hope someone can see what goes wrong here. If needed I can supply more info - just tell me what. 

Share this post


Link to post
Share on other sites
Advertisement

This was a bug in asIScriptEngine::CreateScriptObject when used to create an instance of a template value type (which is what the weakref type is).

 

I've fixed this in revision 2339.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!