Ticket #920 (closed defect: fixed)

Opened 23 months ago

Last modified 22 months ago

Crash on exit: Handle tag mismatch (stale reference?)

Reported by: historic_bruno Owned by:
Priority: Should Have Milestone: Alpha 7
Component: Core engine Keywords:
Cc: jan

Description

OS: Win 7 Pro 64-bit
Version: [9967] release build (32-bit), compiled with VC 2010 express

First time I've seen this type of error on this computer and not sure that I can reproduce it :/ Hope there's some info here that helps.


Function call failed: return value was -120003 (Handle tag mismatch (stale reference?))
Location: h_mgr.cpp:235 (h_data_tag)

Call stack:

h_data_tag_type (h_mgr.cpp:247)
    h = 600834437 (0x0000000023D00185)
    type = 0x002D6060 -> 
        init = 0x0021D9D0 -> (OglTex_init)
        reload = 0x0021DA20 -> (OglTex_reload)
        dtor = 0x0021C820 -> (OglTex_dtor)
        validate = 0x0021D2A0 -> (OglTex_validate)
        to_string = 0x0021C860 -> (OglTex_to_string)
        user_size = 64 (0x00000040)
        name = 0x0029CFB8 -> "OglTex"

    hd = (unavailable)

h_free (h_mgr.cpp:583)
    h = 0x03A0F280 -> 60879008 (0x0000000003A0F0A0)
    type = 0x002D6060 (see above)
    hd = 0x03A0F280 (see above)

ogl_tex_free (ogl_tex.cpp:557)
    ht = 0x03A10E3C -> 0 (0x0000000000000000)

UniFont_dtor (unifont.cpp:70)
    f = 0x03A10E3C (see above)

Shutdown (h_mgr.cpp:747)

ModuleShutdown (module_init.cpp:72)
    initState = 0x002DA8CC -> 4294867266 (0xFFFE7942)
    shutdown = 0x0021FE60 -> (Shutdown)

h_mgr_shutdown (h_mgr.cpp:761)

Shutdown (gamesetup.cpp:672)
    __formal = 0 (0x00000000)
    LINE_624_ = 
        m_t0 = 56.3885 (0x404C31BA344CB175)
        m_description = 0x00280078 -> "resource modules"

    LINE_629_ = 
        m_t0 = 56.3885 (0x404C31BA344CB175)
        m_description = 0x00280078 (see above)

    LINE_634_ = 
        m_t0 = 56.3885 (0x404C31BA344CB175)
        m_description = 0x00280078 (see above)

    LINE_641_ = 
        m_t0 = 56.3885 (0x404C31BA344CB175)
        m_description = 0x00280078 (see above)

    LINE_647_ = 
        m_t0 = 56.3885 (0x404C31BA344CB175)
        m_description = 0x00280078 (see above)

    LINE_651_ = 
        m_t0 = 56.3885 (0x404C31BA344CB175)
        m_description = 0x00280078 (see above)

    LINE_655_ = 
        m_t0 = 56.3885 (0x404C31BA344CB175)
        m_description = 0x00280078 (see above)

    LINE_661_ = 
        m_t0 = 56.3885 (0x404C31BA344CB175)
        m_description = 0x00280078 (see above)

    LINE_674_ = 
        m_t0 = 56.3885 (0x404C31BA344CB175)
        m_description = 0x00280078 (see above)


RunGameOrAtlas (main.cpp:493)
    argc = 2 (0x00000002)
    argv = (unavailable)
    args = 
        m_Args = (unsupported vector<pair<CStr8,CStr8> >)
        m_Arg0 = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 92 ('\')


    paths = 
        m_root = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_rdata = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 8

        m_data = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 62776

        m_config = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 10072

        m_cache = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 14458

        m_logs = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 10066


    replay = 
        m_Stream = 0x00000000

    mod = 
        path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 57914

    zip = 
        path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
        separator = 23

    paths = 
        m_root = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 0

        m_rdata = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 8

        m_data = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 62776

        m_config = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 10072

        m_cache = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 14458

        m_logs = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 10066


    builder = 
        m_VFS = 
            px = 0x020A2750 -> (IVFS)
            pn = 
                pi_ = 0x002A0035 -> 
                    use_count_ = 1811939328 (0x6C000000)
                    weak_count_ = 1979737344 (0x76006500)



        m_Files = (unsupported vector<Path >)
        m_TempDir = 
            path = (unsupported basic_string<wchar_t,char_traits<wchar_t> >)
            separator = 335



main (main.cpp:511)
    argc = 2 (0x00000002)
    argv = 0x020A7B38 -> 0x01FC83F0 -> "C:\Users\Ben\devel\ps\binaries\system\pyrogenesis.exe"

wmain (wseh.cpp:380)
    argc = 2 (0x00000002)
    argv = 0x01FC7A00 -> 0x01FC7A0C -> "C:\Users\Ben\devel\ps\binaries\system\pyrogenesis.exe"
    utf8_argv = (unsupported vector<char * >)
    ret = 33323520 (0x01FC7A00)
    utf8 = (unsupported basic_string<char,char_traits<char> >)

CallStartupWithinTryBlock (wseh.cpp:397)
    ret = 0 (0x00000000)

RtlInitializeExceptionChain (:0)

RtlInitializeExceptionChain (:0)


errno = 0 (No error reported here)
OS error = 487 (Attempt to access invalid address.)

Change History

comment:1 Changed 23 months ago by historic_bruno

Hmm, I've gotten this error 2-3 times since then.

comment:2 Changed 22 months ago by jan

Gah, this one's elusive. FYI, the exact error message is new, it's just somewhat more detailed reporting of the same crash at shutdown bug we've been seeing intermittently. The rarity made me think of a race condition, so I wrapped the important routines in critical sections (h_alloc, h_free, h_reload, h_find, h_force_free, Shutdown). That didn't solve the problem - I saw it once after, but unfortunately didn't remember to look in the debug output for the expected/actual handle value. Haven't been able to reproduce it since, even after a really long game. The next time you see this, please check the debug output for "h_mgr: expected handle %llx, got %llx\n". Hopefully that will provide a clue.

comment:3 Changed 22 months ago by historic_bruno

Try autostart, I get the error much more frequently that way.

Debug output:

h_mgr: expected handle 33f96a0, got 948800fa

comment:4 Changed 22 months ago by historic_bruno

  • Status changed from new to closed
  • Resolution set to duplicate

Duplicates #915.

comment:5 Changed 22 months ago by jan

  • Resolution changed from duplicate to fixed

(In [10243]) h_mgr: fix simple double-free warning triggered at shutdown when an object's child was freed AND the all objects were forcibly freed (complicated by the fact that the pool allocator overwrites freed storage, which made this appear to be a tag conflict). fixes #860, #915, #920

Note: See TracTickets for help on using tickets.