Opened 11 years ago

Last modified 21 months ago

#2105 assigned bug

BeLiveR5 hangs on splash screen

Reported by: kaoutsis Owned by: nobody
Priority: normal Milestone: R1
Component: - General Version: R1/alpha4.1
Keywords: Cc:
Blocked By: Blocking:
Has a Patch: no Platform: All

Attachments (1)

test.cpp (1.4 KB) - added by pulkomandy 7 years ago.
Test app showing TranslationUtil locking problem.

Download all attachments as: .zip

Change History (7)

comment:1 Changed 11 years ago by kaoutsis

revision is hrev25058

comment:2 Changed 7 years ago by pulkomandy

Still hangs in hrev42434. After some debugging and source observation, here is what happens :

  • The splash screen is created in the BApplication constructor, and shown there.
  • It uses BTranslationUtils to load its picture.
  • BTranslationUtils->GetBitmap tries to lock the application BLooper. Since the constructor is not finished, Run() was not called, so it waits on that.
  • The constructor does more things ; later it wants to close the splash screen, and to do this, it tries to Lock() it. But the splashscreen is still trying to lock the application...

So, the app Run() will never get called. We have a deadlock!

Attached is a minimal application replicating the issue.

Seems like on BeOS, TranslationUtils didn't need to lock the BApplication ?

Changed 7 years ago by pulkomandy

Attachment: test.cpp added

Test app showing TranslationUtil locking problem.

comment:3 Changed 7 years ago by axeld

I'm not sure if it's worth to fix that. In any case, the problem stems from the BTranslatorRoster::Private class which adds itself as a handler to be_app, in order to provide node monitoring support for the translators. This tremendously cuts speeds up loading things from via translators, as they don't have to be reloaded every time you load something using it. I tried to save adding another looper for all teams that use the translation kit.

Alternatively, we could just add a port, and evaluate the notifications only every time the kit is used.

In any case, we should try to have a single usable implementation of such an add-on listener somewhere (I know that there is one in our storage kit, but I'm not really confident with that one).

comment:4 Changed 6 years ago by waddlesplash

The original BeLive can now be found here: http://dev.osdrawer.net/attachments/download/51/BeLiveR5.zip

And this is still a problem on R1/alpha4.1

comment:6 Changed 6 years ago by waddlesplash

Version: R1/pre-alpha1R1/alpha4.1

comment:7 Changed 21 months ago by axeld

Owner: changed from axeld to nobody
Status: newassigned
Note: See TracTickets for help on using tickets.