Jump to content
  • Advertisement
Sign in to follow this  

Crash When Trying To Store Weakref In An Array

This topic is 872 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();
    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

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.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!