Well, I've just found a bug in Bugzilla that says all proxied objects need to have the thread-safe implementation of nsISupports. It looks like the nsWebBrowser class doesn't have the thread-safe implementation.
So, I'm thinking that in order to fix this problem, I could create a new XPCOM interface that does have the thread-safe nsISupports implementation, and which effectively wraps an nsWebBrowser. Then I could proxy my wrapper onto the main thread...are there any gotchas I should be aware of, or is there a reason why this wouldn't work that I haven't thought of? Any comments would be greatly appreciated. -- Brad Fish [EMAIL PROTECTED] TALL Group Programmer "Brad Fish" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > OK, an update to the problem. I've run my code with a debug build of > Mozilla 1.3.1 and got the following output: > > WARNING: Trying to set p, file > c:/mozilla_debug/mozilla/modules/libpref/src/prefapi.cpp, line 1017 > ###!!! ASSERTION: nsWebBrowser not thread-safe: 'owningThread == > NS_CurrentThread()', file c:/mozilla_debug/mozilla/xpcom/glue/nsDebug.cpp, > line 533 > ###!!! ASSERTION: nsProxyCreateInstance not thread-safe: 'owningThread == > NS_CurrentThread()', file c:/mozilla_debug/mozilla/xpcom/glue/nsDebug.cpp, > line 533 > Break: at file c:/mozilla_debug/mozilla/xpcom/glue/nsDebug.cpp, line 533 > Break: at file c:/mozilla_debug/mozilla/xpcom/glue/nsDebug.cpp, line 533 > ###!!! ASSERTION: RgnRectMemoryAllocator not thread-safe: 'owningThread == > NS_CurrentThread()', file c:/mozilla_debug/mozilla/xpcom/glue/nsDebug.cpp, > line 533 > Break: at file c:/mozilla_debug/mozilla/xpcom/glue/nsDebug.cpp, line 533 > > Shortly after this happens Windows XP throws up one of those send error > report boxes. With the release build it simple freezes my thread. > > I admit I don't really understand what's going on. The reason I was using > proxies is to avoid thread-safety problems. Are these assertions false > positives? Either way, does anyone have any ideas what might be causing > this? Thanks in advance! > -- > Brad Fish > [EMAIL PROTECTED] > TALL Group Programmer > > "Brad Fish" <[EMAIL PROTECTED]> wrote in message > news:[EMAIL PROTECTED] > > I'm having a really strange problem and am wondering if anyone out there > > knows how to solve it. > > > > I'm embedding Mozilla in a Java program. I'm creating a new native > thread, > > inside which I call NS_InitEmbedding, etc., and then enter a native event > > loop. From another thread in Java, I'm calling into my native code to > > create an embedded WebBrowser instance. In order to make sure that it > gets > > created on the main XPCOM UI thread and eliminate threading issues in > > subsequent calls, I'm using the nsIProxyObjectManager's GetProxy method to > > defer creation onto the main XPCOM thread. Here's the code I'm using: > > > > proxy_service = do_GetService(NS_XPCOMPROXY_CONTRACTID, &rv); > > if (NS_FAILED(proxy_service->GetProxy(NS_UI_THREAD_EVENTQ, kWebBrowserCID, > > nsnull, NS_GET_IID(nsIWebBrowser), PROXY_SYNC | PROXY_ALWAYS, > > (void **)&web_browser))) > > return false; > > > > After this I use GetProxyForObject to get nsIWebNavigation, nsIBaseWindow, > > etc. > > > > Everything works 75% of the time without any problems whatsoever. > However, > > sometimes (it appears to be somewhat random), my thread will hang on the > > call to GetProxy, which never returns. I'm not really sure what could be > > causing this to happen, and like I said, things work great most of the > time. > > > > I'm working with a release build that I made from the 1.3.1 source code. > > I'm hoping that someone might have some ideas or be able to point me in > the > > right direction, otherwise I'm going to plan on making a debug build and > see > > if I'm my code is triggering some asserts that I may be missing in the > > release build. > > > > Thanks in advance. > > -- > > Brad Fish > > [EMAIL PROTECTED] > > TALL Group Programmer > > > > > >
