Граф коммитов

251 Коммитов

Автор SHA1 Сообщение Дата
edburns%acm.org d9cd53fece The problem was in the way the
NativeEventThread's run() method's infinite loop was implemented.  The
  loop looks like this:

    while (null != this.browserControlCanvas) {
        synchronized (this.browserControlCanvas.getTreeLock()) {
            nativeProcessEvents(nativeWebShell);

            if (null != listenersToAdd && !listenersToAdd.isEmpty()) {
                tempEnum = listenersToAdd.elements();
                while (tempEnum.hasMoreElements()) {
                    nativeAddListener(nativeWebShell,
                                          (WebclientEventListener)
                                      tempEnum.nextElement());
                }
                listenersToAdd.clear();
            }
        }
    }

  The problem I was observing was that
  nativeProcessEvents(nativeWebShell) would crash due to the fact that
  the nativeWebShell, which is actually an WebShellInitContext instance,
  had been de-allocated.  This de-allocation happens as a result of the
  WindowControlImpl.delete() method, which looks like this:

public void delete()
{
    Assert.assert(null != eventThread, "eventThread shouldn't be null at delete time");
    eventThread.delete();
    eventThread = null;
    nativeDestroyInitContext(nativeWebShell);
    nativeWebShell = -1;
}

  nativeDestroyInitContext de-allocates the WebShellInitContextInstance.
  You can see that the first thing done is to delete the eventThread().
  NativeEventThread.delete() looks like this:

public void delete()
{
    // setting this to null causes the run thread to exit
    synchronized(this.browserControlCanvas.getTreeLock()) {
        browserControlCanvas = null;
    }
...
}

  If you compare NativeEventThread.delete() with the infinite loop in
  NativeEventThread.run(), you'll see that the fact that they both
  synchronize on the same object doesn't protect us from the following
  case:

    NativeEventThread: The infinite loop checks to see if the
    browserControlCanvas is null, then does synchronize on
    browserControlCanvas.getTreeLock(), then calls processNativeEvents().

meanwhile

    WindowControlImpl thread: delete() calls NativeEventThread.delete(),
    which does synchronize on browserControlCanvas.getTreeLock().
    During NativeEventThread.delete(), synchronized section,
    browserControlCanvas is set to null.

    NativeEventThread: because the check for null browserControlCanvas
    occurrs outside of the synchronized block, it's not recheked, and
    thus, the event loop continues to process when it shouldn't.

  The fix is to change the event loop to look like this:

    while (true) {
        synchronized (this.browserControlCanvas.getTreeLock()) {
            // this has to be inside the synchronized block!
            if (null == this.browserControlCanvas) {
                return;
            }
            nativeProcessEvents(nativeWebShell);

            if (null != listenersToAdd && !listenersToAdd.isEmpty()) {
                tempEnum = listenersToAdd.elements();
                while (tempEnum.hasMoreElements()) {
                    nativeAddListener(nativeWebShell,
                                          (WebclientEventListener)
                                      tempEnum.nextElement());
                }
                listenersToAdd.clear();
            }
        }
    }
2000-04-03 04:32:27 +00:00
rpallath%eng.sun.com b7d91147d9 changed == to != 2000-04-01 01:29:59 +00:00
edburns%acm.org 9f827678b5 Adding this line to the top of the run() method in
NativeEventThread seems to fix the hanging problem.

    this.setPriority(Thread.MIN_PRIORITY);


Looks like it was starvation.
2000-04-01 01:17:33 +00:00
rpallath%eng.sun.com 652e342dd1 Updated classPATH in mozilla.bat nad mozilla.csh 2000-04-01 00:34:48 +00:00
rpallath%eng.sun.com cb69af2c93 Removing DOMAccessorImpl as it is no longer valid. 2000-04-01 00:07:02 +00:00
rpallath%eng.sun.com a9b57a5ba1 Added DOMAccessor.java (insted of DOMAccessorImpl)
Added redirect.html
2000-04-01 00:04:15 +00:00
sdv%sparc.spb.su 814dcc76c5 removed org/mozilla/dom/tests from JDIR 2000-03-31 19:22:48 +00:00
edburns%acm.org 98536e5bea Thanks to Andi Eades, and Steffen Grarup for finding and fixing this.
Basically, we were storing a local jobject ref and using it on
 another thread without calling NewGlobalRef.

The fix is below:

cvs diff WindowControlImpl.cpp NativeEventThread.cpp (in directory D:\Projects\mozilla\java\webclient\src_moz\)
Index: WindowControlImpl.cpp
===================================================================
RCS file: /cvsroot/mozilla/java/webclient/src_moz/WindowControlImpl.cpp,v
retrieving revision 1.5
diff -r1.5 WindowControlImpl.cpp
131c131,134
<     initContext->nativeEventThread = nsnull;
---
>     if (nsnull != initContext->nativeEventThread) {
>         ::util_DeleteGlobalRef(env, initContext->nativeEventThread);
>         initContext->nativeEventThread = nsnull;
>     }
Index: NativeEventThread.cpp
===================================================================
RCS file: /cvsroot/mozilla/java/webclient/src_moz/NativeEventThread.cpp,v
retrieving revision 1.7
diff -r1.7 NativeEventThread.cpp
213c213,215
<         initContext->nativeEventThread = obj; // VERY IMPORTANT!!
---
>         initContext->nativeEventThread =
>             ::util_NewGlobalRef(env, obj); // VERY IMPORTANT!!
>

*****CVS exited normally with code 1*****
2000-03-31 17:09:00 +00:00
sdv%sparc.spb.su fe663d8006 moved applet tests to tests/src/applets 2000-03-31 01:42:34 +00:00
sdv%sparc.spb.su 11a9d1af25 keeping track with Java DOM changes
r=idk@eng.sun.com
2000-03-31 01:22:00 +00:00
sdv%sparc.spb.su 18acde14ee added DOMAccessor.java patch 2000-03-31 00:11:36 +00:00
sdv%sparc.spb.su 26937e21bf A major update:
- reduces a number of c++<--> java calls
- added NULL checks
- made DOMAccessor to be secure
- added util and tests packages
- wrote test applets
- updated README
2000-03-30 23:52:19 +00:00
sdv%sparc.spb.su f783e6228f removed java files which were placed
to classes dir
2000-03-29 01:07:03 +00:00
sdv%sparc.spb.su 8c2aa12cf4 put module sources to a single dir
updated makefiles
2000-03-29 00:43:54 +00:00
sdv%sparc.spb.su 43a0aedd4e put classes to a single dir
updated makefiles
2000-03-29 00:41:22 +00:00
ashuk%eng.sun.com 2c6c864e3c a=ashuk
Made changes to the solaris makefile to include jni_util_export - for webclient-uno stuff

_Ashu
2000-03-28 21:36:04 +00:00
sdv%sparc.spb.su 6015d910d0 updated makefiles 2000-03-28 05:11:02 +00:00
sdv%sparc.spb.su 7b1271aded keeping track with mozilla interface changes 2000-03-28 04:55:38 +00:00
sdv%sparc.spb.su 56a2016ca3 added new methods from the recent w3c
java binding
2000-03-28 02:11:13 +00:00
edburns%acm.org 6f94ba590d I really meant to check in this one. 2000-03-27 20:28:21 +00:00
rpallath%eng.sun.com b24ebec175 Removed Control-M characters 2000-03-23 23:24:32 +00:00
edburns%acm.org 12f9501da2 bug=33093
a=edburns
r=ashuk

Force prefs to be read, causing the proxy data to be read.
2000-03-23 23:08:35 +00:00
edburns%acm.org 8952b1fe7f bug=33093
a=edburns
r=ashuk

Force prefs to be read, causing the proxy data to be read.
2000-03-23 22:57:57 +00:00
edburns%acm.org aa3d2d50d7 r=ashuk
a=edburns
bug=32011
This change enables the current webclient API to be called from native
code.

It adds makefile and conditional compilation logic.

If the user defines BAL_INTERFACE in their environment before building
webclient, -DBAL_INTERFACE is added to LCFLAGS.  This causes code in
jni_util_export.cpp to behave differently due to the conditional
compilation logic.

I've broken out the 8 functions that are necessary to call into the
Webclient JNI methods into jni_util_export.{h,cpp}.

I've created a new pair of files, bal_util.{h,cpp} that contain function
declarations and definitions that are used when src_moz is built with
BAL_INTERFACE.  bal_util.obj is not built, nor added to webclient.dll if
building without BAL_INTERFACE.

See the page
http://www.mozilla.org/projects/blackwood/webclient/design/uno-transition.html
for a design document description of these changes.
2000-03-21 19:27:13 +00:00
idk%eng.sun.com 879ef78e6d Fixed build problems.
Changed char*const* to const char *const* in some places.
2000-03-21 01:10:35 +00:00
rpallath%eng.sun.com e5594f6d7d dding new files 2000-03-17 00:27:29 +00:00
rpallath%eng.sun.com 13653e9f78 dding new files for Java Plugins 2000-03-17 00:17:17 +00:00
edburns%acm.org d7929152b5 bug=32011
r=ashuk
a=edburns
This set of changes replaces all occurrences of

env->Func(args...)

with

::util_Func(env, args...)

Except of course, for the implementations of the above mentioned
::util_Func() functions.

This is done to allow the JNI functions to be called from a non JNI
context, such as UNO.
2000-03-16 23:07:03 +00:00
rpallath%eng.sun.com 0d50455cde *** empty log message *** 2000-03-16 23:05:30 +00:00
rpallath%eng.sun.com 5706870e9e Added new files 2000-03-16 22:54:41 +00:00
rpallath%eng.sun.com b3c6f3d600 . 2000-03-16 22:42:09 +00:00
rpallath%eng.sun.com ea209f377e *** empty log message *** 2000-03-16 22:16:08 +00:00
rpallath%eng.sun.com ef552c8b43 *** empty log message *** 2000-03-16 22:11:53 +00:00
rpallath%eng.sun.com c6bfef23d2 Pluglet API tests 2000-03-16 22:06:17 +00:00
sdv%sparc.spb.su 4293bc7c5b added target to make java classes on windows 2000-03-13 23:03:07 +00:00
edburns%acm.org 2b80283ff3 This checkin adds API to cleanly destroy a BrowserControl instance. It
also modifies EmbeddedMozilla so this code is exercised.

I have changed EmbeddedMozilla to be a stub-like class that simply
displays a Frame with a single Button, titled "New Window".  Pressing
this button causes an EMWindow to be created and displayed.  EMWindow is
basically the former EmbeddedMozilla renamed, with modifications to the
WindowListener implementation to call the BrowserControl deallocation
method.

I've added a delete() method to ImplObect:

 * I know Java has automatic garbage collection and all, but explicitly
 * adding a delete method helps the gc algorithm out. <P>

 * Subclasses should override this and call super.delete() at the end of
 * their overridden delete() method.

 * @see org.mozilla.webclient.wrapper_native.ImplObjectNative#delete

and ImplObjectNative:

 * Note how we call super.delete() at the end.  THIS IS VERY IMPORTANT. <P>

 * Also, note how we don't de-allocate nativeWebShell, that is done in
 * the class that owns the nativeWebShell reference, WindowControlImpl.

 * ImplObjectNative subclasses that further override delete() are <P>

<CODE><PRE>
BookmarksImpl.java
EventRegistrationImpl.java
NativeEventThread.java
WindowControlImpl.java
</PRE><CODE> <P>

 * All other ImplObject subclasses don't have any local Ivars and thus
 * don't need to override delete().

I've added a delete() method to BrowserControlImpl:

 * Called from BrowserControlFactory.deleteBrowserControl() <P>

 * The order of deletion of objects is very important! <P>

 * We don't allow deletion if the Canvas is showing. <P>

In BrowserControlImpl's delete(), the important delete()s is for
WindowControlImpl:

 * First, we delete our eventThread, which causes the eventThread to
 * stop running.  Then we call nativeDestroyInitContext(), which
 * deallocates native resources for this window.

As stated above, NativeEventThread.delete() is called:

 * This is a very delicate method, and possibly subject to race
 * condition problems.  To combat this, our first step is to set our
 * browserControlCanvas to null, within a synchronized block which
 * synchronizes on the same object used in the run() method's event
 * loop.  By setting the browserControlCanvas ivar to null, we cause the
 * run method to return.

After all of this deleting, we return from
BrowserControlFactory.delete().
2000-03-13 18:44:32 +00:00
edburns%acm.org 20a7194058 r=ashuk
a=edburns
bug=31253

This change doesn't impact SeaMonkey.

Move the initialization of the nativeWebShell ptr into a superclass.
2000-03-09 23:22:52 +00:00
edburns%acm.org 0d6fc7f850 bug=31123
a=edburns
r=bruce

Folks, don't EVER use NULL in your c++ code.  Use nsnull instead.
2000-03-09 05:12:42 +00:00
edburns%acm.org 0bf1d2eb4c JAVAH generated header files should not be checked in, since they are generated as a result of the build. 2000-03-09 04:41:43 +00:00
sherry.shen%sun.com afbace2f0e Bug #28281, r=leaf, a=leaf,
Add an option for building Java-supplement and
fix the Java building problem about JDIRS.
2000-03-09 01:14:22 +00:00
edburns%acm.org f4c528647e For win32 builds. If you define
WEBCLIENT_SPEC=1

in your environment before building webclient, the spec-compliant
version of webclient will be built.
2000-03-08 19:17:16 +00:00
edburns%acm.org b07d563b43 Changed NULL to nsnull, so it would build with gcc.
.
2000-03-08 18:54:00 +00:00
ashuk%eng.sun.com 16019f5a72 a=edburns
r=edburns
author=ashuk
bug=28407

Made fix for new BookmarksImpl.java file -- Ashu K.
2000-03-08 18:49:36 +00:00
ashuk%eng.sun.com 43a6915347 a=edburns
r=edburns
author=ashuk
bug=28407

Made fix for changed BookmarksImpl.cpp file in the Stubs file -- Ashu K.
2000-03-08 18:41:01 +00:00
ashuk%eng.sun.com b6b1747f72 a=edburns
r=edburns
author=ashuk
bug=28407

New native code for spec-compliant impl ported to solaris -- Ashu K.
2000-03-07 22:45:37 +00:00
ashuk%eng.sun.com 9fe6afbb8e a=edburns
r=edburns
author=ashuk
bug=28407

Moved this file to java/webclient/classes_new/org/mozilla/webclient/wrapper_native -- Ashu K.
2000-03-07 22:39:11 +00:00
ashuk%eng.sun.com 632a1b0f34 a=edburns
r=edburns
author=ashuk
bug=28407

New native code for spec-compliant impl ported to solaris -- Ashu K.
2000-03-07 22:33:38 +00:00
edburns%acm.org 29ed3a17ef NOT IN SeaMonkey
Added // PENDING comment
2000-03-07 22:32:27 +00:00
ashuk%eng.sun.com 364a2788bc a=edburns
r=edburns
author=ashuk
bug=28407

New run script for spec-compliant impl -- Ashu K.
2000-03-07 22:19:20 +00:00
ashuk%eng.sun.com 11dfd4783d a=edburns
r=edburns
author=ashuk
bug=28407

New solaris Makefile for spec-compliant impl -- Ashu K.
2000-03-07 22:18:17 +00:00