Page 1 of 1

Crash in InlineCollection::Clear() - related to reference counting?

Posted: 17 Aug 2019, 09:21
by unvestigate

I am using Noesis 2.2.3 with C++ and I get a crash when running my game in debug mode. I think it has to do with reference counting but I am not sure. Basically I have a text block on the HUD where I want to mix text and images (eg. "Press <BUTTON> to activate" where BUTTON is an image of the button to press). I do this with a user control called HUDPrompt where the code looks like this:
<UserControl x:Class="Slide.HUDPrompt"
             d:DesignHeight="1080" d:DesignWidth="1920">
    <Grid x:Name="LayoutRoot">
        <TextBlock x:Name="PromptTextBlock" FontSize="22" Foreground="#FFFFFFFF" Opacity="1" FontFamily="fonts/#Kimberley Alternate" noesis:Text.Stroke="#FF000000"
                noesis:Text.StrokeThickness="3">HUD Prompt</TextBlock>
So basically just a text block. I get a reference to the text block in C++ like this:
void HUDPrompt::OnLoaded(Noesis::BaseComponent* sender, const Noesis::RoutedEventArgs& args)
	mTextBlock = FindName<Noesis::TextBlock>("PromptTextBlock");
	BASIS_ASSERT(mTextBlock != nullptr);
Then, when I want to set the text of the prompt I call
Noesis::InlineCollection* inlineCollection = mTextBlock->GetInlines();
and then I pass the inline collection to a number of functions that add inlines to it. It seems the text (ie. run) addition works fine. The issue is with the images. The image adding looks like this:
Noesis::Ptr<Noesis::BitmapImage> bm = *new Noesis::BitmapImage(texturePath);

Noesis::Ptr<Noesis::Image> img = *new Noesis::Image();

Noesis::Ptr<Noesis::InlineUIContainer> iuc = *new Noesis::InlineUIContainer(img);
Now, If I switch the text twice, the second call to inlineCollection->Clear(); will crash with the following info:
Exception thrown at 0x00007FFC5834AABF (Noesis.dll) in Slide.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.
If I add an reference to "iuc" before adding it to the inlineCollection the game no longer crashes but that gives me a large number of leaks on shutdown, as you would expect. This only occurs in debug builds. In release everything works as it should, though I assume bad things are going on under the hood.

I assume I am doing something wrong here with regards to ref counting but I cannot seem to figure out what. Any ideas?


Re: Crash in InlineCollection::Clear() - related to reference counting?

Posted: 19 Aug 2019, 14:01
by unvestigate
Small correction. I managed to reproduce this in release mode too. However, it seems to be a lot more random in release.

Re: Crash in InlineCollection::Clear() - related to reference counting?

Posted: 20 Aug 2019, 20:38
by sfernandez
Hi, I was able to reproduce the crash, could you please report it in our bugtracker and we will fix it for the next release.
Thanks for the collaboration.

Re: Crash in InlineCollection::Clear() - related to reference counting?

Posted: 21 Aug 2019, 08:13
by unvestigate
Added to mantis with ID 0001542.

Re: Crash in InlineCollection::Clear() - related to reference counting?

Posted: 22 Aug 2019, 20:02
by sfernandez
Thanks for the report, the fix will be included in the next release.