Hi, Stephan Assmus wrote: >> Looks to me StringWidth() is not implemented well. I tested this >>on R5 and it works. >> The reason: when you create a BApplication object its looper is >>locked until you call ::Run(). StringWidth() uses >>BApplication's server connection and for that it must acquire >>BApplication's lock. Because StringWidth() is called from >>BWindow's thread we get a deadlock. >> Don't know how this should be solved... I guess we should use >>BWindow for getting font data. Just a thought. > > If you try this on R5, you should be thrown into the debugger with "The > looper must be locked." Yet, under R5 it works flawlessly. > The thing I don't get is > how BView::StringWidth() is related to BWindow::MoveBy(). BWindow::MoveBy() is called from the main thread(BApplication) (locked until ::Run() is called) and tries to lock "BWindow's looper". In the mean time BWindow's thread just received an _UPDATE_ request (locked itself before calling DispatchMessage()) and called HelloView::Draw(). In this 'Draw()' StringWidth() is called which tries to lock BApplication so that it can use its ports for communicating with app_server. Deadlock. bye, Adi.