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

2536 Коммитов

Автор SHA1 Сообщение Дата
jband%netscape.com 4b23169051 fix for crash that can happen when wrapped JS objects get accessed after xpconnect shutdown. This was burning outside users of xpconnect. bug 45669. r=mccabe@netscape.com a=brendan@mozilla.org 2000-07-19 06:15:32 +00:00
jband%netscape.com 895baf831b fix bustage from dougt's last change to this file. not part of build. r=dougt@netscape.com 2000-07-19 06:11:12 +00:00
jband%netscape.com d64b148f22 patches from madams@janna.com to build xpconnect standalone. bug 42026. r=leaf@mozilla.org a=brendan@mozilla.org 2000-07-19 03:36:27 +00:00
rogerl%netscape.com cfd4e435be Removed all xxxCall, using simple call for everything.
Changed methods to use mMethods vector instead.
Various other fixes etc.
2000-07-18 20:53:03 +00:00
beard%netscape.com 0a43ce9109 Added ClassOutput.java, WrapHandler.java. 2000-07-18 01:29:34 +00:00
beard%netscape.com a831464e86 cleaned up by removing widenCString() calls when using world.identifiers 2000-07-17 20:39:19 +00:00
nboyd%atg.com c0a575bf5b Fix javadoc error. 2000-07-17 14:08:28 +00:00
brendan%mozilla.org 282dc9d68d Remove unused vars and WIN16 crap; improve freelist-scavenging code to avoid taking too big an arena off the freelist in the case where nb > arenasize (41381 again, r=jband@netscape.com). 2000-07-15 19:12:49 +00:00
mcafee%netscape.com decadd6ee1 Ignore generated files 2000-07-15 15:56:34 +00:00
rginda%netscape.com 5873d1f4ef removing bogus assert (per rogerl) 2000-07-15 00:01:25 +00:00
beard%netscape.com 793761a64f added operator[](const char*) to StringAtomTable. 2000-07-14 23:10:02 +00:00
rogerl%netscape.com 3efd4c7ae7 Fixed slots for non-function vars, plus bug in slot xcrement. 2000-07-14 22:23:20 +00:00
brendan%mozilla.org bfa5020e72 Fix for..in loop bug that reopened 41126 (r=jband@netscape.com). 2000-07-14 05:37:40 +00:00
brendan%mozilla.org aa640b04e4 Fix 41381 regression from last fix attempt (r=jband). 2000-07-14 05:35:08 +00:00
jband%netscape.com 5aed7f0953 Fix dropProperty crash. This is needed because the JSObjects used by xpconnect wrapped natives need to act both as host objects with non-slot properties and as a plain JSObjects using the default JSOps and all that entails. So, we can't be passing the host-style props to dropProperty though we do still need to do so for other props. This has only been working up to now by luck. r=brendan@mozilla.org a=brendan@mozilla.org 2000-07-14 05:34:46 +00:00
rogerl%netscape.com 394eae2d67 Backed out time() 2000-07-14 01:46:14 +00:00
rogerl%netscape.com 9d9a2397fe Type targetted binary operators.
Added 'time()' function as native.
2000-07-14 01:00:53 +00:00
jband%netscape.com ca2743a4e9 add THREADSAFE nsISupports implementation macros to some of the classes which lacked them. bug 45404. a=brendan@mozilla.org 2000-07-13 23:04:15 +00:00
brendan%mozilla.org 16c0b57382 Why didn't the lack of this break Linux, where I tested? 2000-07-13 05:56:28 +00:00
syd%netscape.com 319637810d Add support to JS profiler for collecting min, max, and average execution
times of functions. Doesn't yet handle rentrancy. Create Makefile.in files
so this stuff will build on *nix. r=jband, a=leaf
2000-07-13 05:19:22 +00:00
brendan%mozilla.org 87fdbe9365 Try again for bug 41381, r=wtc@netscape.com 2000-07-13 05:08:35 +00:00
brendan%mozilla.org b718a50b56 Uh oh. Back out last change until I'm sure I'm not an idiot. 2000-07-13 04:00:33 +00:00
brendan%mozilla.org d727cfab13 Fix ancient bugs: compare-and-swap is not threadsafe given A-B-A address replay via malloc/free; release to mark in pool->first empty arena would not free anything, as troy@tellme.com found (41381, r=wtc@netscape.com). 2000-07-13 03:49:22 +00:00
beard%netscape.com c85b319f3b need <stdio.h> for fopen on the Mac. 2000-07-13 02:23:55 +00:00
beard%netscape.com 7d2456d02a fixing readEvalFile to save off important Context data members. implemented identical_Default for string 2000-07-13 01:35:57 +00:00
beard%netscape.com 4a274478e3 fixing readEvalFile() by creating another Context 2000-07-13 00:44:30 +00:00
rogerl%netscape.com bc2242f4d4 Switching to generic binary operator in order to distinguish situation
where Operators package had been loaded and be able to generate typed
versions of the binary operators otherwise.
2000-07-13 00:14:54 +00:00
dougt%netscape.com c422448137 bug 40750.
Adding followSymlink flag to nsILocalFile.
Adjusting callers.
windows shortcut optimizations.
r=blizzard@mozilla.org.
a=brendan@mozilla.org
2000-07-12 23:31:31 +00:00
jdunn%netscape.com 79a7d94f44 do not include -lm for HPUX (as well as BeOS)
r= leaf@mozilla.org
2000-07-12 22:41:17 +00:00
brendan%mozilla.org 5e34c8be8b Fix 'out of order' malloc failure-handling bug found by cgn1234@yahoo.com (41022, r=cgn1234). 2000-07-12 01:44:12 +00:00
rogerl%netscape.com 6982a7a85f Implemented Import -only it's not in the parser yet.
Added missing defineXXX functions.
2000-07-11 23:49:20 +00:00
rginda%netscape.com 0521d8724e cleaned up linux warnings, minor debugger tweaks 2000-07-11 23:08:03 +00:00
rogerl%netscape.com 892b3e4cff More on @ operator. Fixed R 4billion print bug. 2000-07-11 20:54:06 +00:00
rogerl%netscape.com aa83a57078 Some parts of x@<name> working. 2000-07-10 23:18:07 +00:00
jband%netscape.com 938d6e31d0 add previously overlooked support for nsIXPCNativeCallContext implementors to signal that they have set the method return value for the JS caller. a=brendan@mozilla.org r=vidur@netscape.com 2000-07-10 22:39:37 +00:00
rogerl%netscape.com 4fa8a32d3b r=brendan@mozilla.org, Fix for #31255, support '-->' on line by itself as
a line comment - allows old, bogus HTML to execute a la 4.X.
2000-07-10 20:23:54 +00:00
rogerl%netscape.com 38133a200e r=brendan@mozilla.org, Fix for #44013 - enforce security for defineGetter
& defineSetter by calling OBJ_CHECK_ACCESS.
2000-07-10 20:21:38 +00:00
brendan%mozilla.org 13a173485a Fix an out-of-date comment. 2000-07-08 02:35:56 +00:00
brendan%mozilla.org 897fd3f942 Make it safe to nest a GC from js_AllocGCThing, ultimately from the interpreter; also make sure we collect all garbage (even garbage created by finalizers who unroot or unlock GC-things) when destroying the last context (39125, 44376, r=mccabe@netscape.com). 2000-07-08 02:06:01 +00:00
rogerl%netscape.com 0d7c4bc5c1 Support for 'constructor'. 2000-07-08 01:08:29 +00:00
nboyd%atg.com 81838e4e1f Deprecate FlattenedObject. 2000-07-07 14:41:35 +00:00
waterson%netscape.com f9fee044e1 Brendan meant to add jsdhash.h to the Mac build, too. 2000-07-06 20:55:23 +00:00
waterson%netscape.com c929d69839 Brendan meant add jsdhash.c to the Mac build, too. 2000-07-06 20:54:17 +00:00
rogerl%netscape.com f677b9a1dd Removed preprocess step, consolidated identifier handling. 2000-07-06 18:26:26 +00:00
brendan%mozilla.org 5fea88fc63 Fix lying comment, pick control flow nit (r=lumpy,a=jack). 2000-07-06 07:38:11 +00:00
brendan%mozilla.org d77f792685 Add jsdhash.h to export/install lists, and jsdhash.c/.obj. 2000-07-06 04:46:18 +00:00
brendan%mozilla.org 9f75367cb3 Avoid 80th column violations and unnecessary local variable. 2000-07-06 01:15:08 +00:00
brendan%mozilla.org c55f98ab95 Undo teeny optimization from rev 3.28, alas it breaks ECMA Ed. 3, 15.5.4.15. 2000-07-06 00:30:46 +00:00
nboyd%atg.com 434558cabc Remove obsolete references to NodeFactory. 2000-07-05 17:08:26 +00:00
nboyd%atg.com 0dd0718a81 Subject:
Re: Rhino1.5.R1: problems with multithreaded embedded application.
        Date:
             Mon, 03 Jul 2000 14:38:56 -0400
       From:
             Norris Boyd <nboyd@atg.com>
 Organization:
             Art Technology Group
         To:
             Fergus Gallagher <Fergus.Gallagher@orbisuk.com>
 Newsgroups:
             netscape.public.mozilla.jseng
  References:
             1




You found a bug in Rhino; I wonder if others have been running into the same thing.

The problem is with a class called LazilyLoadedCtor. I wrote this class to reduce the
time
required by initStandardObjects by only creating standard objects when the associated
constructors are first accessed. The problem is that this class was not threadsafe.
I've
made changes to that class, and to ScriptableObject as well. The design of dynamic
properties calling getters and setters (which LazilyLoadedCtor uses) didn't really
allow
any way for the getter/setter to replace itself without a thread hazard. I've now
extended
setters so that they can return a value which replaces the getter/setter to avoid this
problem.

Thanks for finding this problem. There have been a couple of other reports of problems
in
this area, so I hope this will fix them.

The patch follows.

--N

Index: LazilyLoadedCtor.java
===================================================================
RCS file: /cvsroot/mozilla/js/rhino/org/mozilla/javascript/LazilyLoadedCtor.java,v
retrieving revision 1.1
diff -u -r1.1 LazilyLoadedCtor.java
--- LazilyLoadedCtor.java 2000/02/29 21:34:37 1.1
+++ LazilyLoadedCtor.java 2000/07/03 18:31:03
@@ -58,9 +58,12 @@
     }

     public Object getProperty(ScriptableObject obj) {
-        obj.delete(ctorName);
         try {
-            ScriptableObject.defineClass(obj, Class.forName(className));
+            synchronized (obj) {
+                if (!isReplaced)
+                    ScriptableObject.defineClass(obj, Class.forName(className));
+                isReplaced = true;
+            }
         }
         catch (ClassNotFoundException e) {
             throw WrappedException.wrapException(e);
@@ -83,11 +86,14 @@
         return obj.get(ctorName, obj);
     }

-    public void setProperty(ScriptableObject obj, Object val) {
-        obj.delete(ctorName);
-        obj.put(ctorName, obj, val);
+    public Object setProperty(ScriptableObject obj, Object val) {
+        synchronized (obj) {
+            isReplaced = true;
+            return val;
+        }
     }

     private String ctorName;
     private String className;
+    private boolean isReplaced;
 }
Index: ScriptableObject.java
===================================================================
RCS file: /cvsroot/mozilla/js/rhino/org/mozilla/javascript/ScriptableObject.java,v
retrieving revision 1.17
diff -u -r1.17 ScriptableObject.java
--- ScriptableObject.java 2000/03/13 17:12:36 1.17
+++ ScriptableObject.java 2000/07/03 18:31:04
@@ -246,11 +246,21 @@
                             break;
                         }
                     }
-                    getterSlot.setter.invoke(start, arg);
+                    Object v = getterSlot.setter.invoke(start, arg);
+                    if (getterSlot.setterReturnsValue) {
+                        slots[slotIndex].value = v;
+                        if (!(v instanceof Method))
+                            slots[slotIndex].flags = 0;
+                    }
                     return;
                 }
                 Object[] args = { this, actualArg };
-                getterSlot.setter.invoke(getterSlot.delegateTo, args);
+                Object v = getterSlot.setter.invoke(getterSlot.delegateTo, args);
+                if (getterSlot.setterReturnsValue) {
+                    slots[slotIndex].value = v;
+                    if (!(v instanceof Method))
+                        slots[slotIndex].flags = 0;
+                }
                 return;
             }
             catch (InvocationTargetException e) {
@@ -1183,6 +1193,7 @@
         slot.delegateTo = delegateTo;
         slot.getter = getter;
         slot.setter = setter;
+        slot.setterReturnsValue = setter != null && setter.getReturnType() !=
Void.TYPE;
         slot.value = null;
         slot.attributes = (short) attributes;
         slot.flags = flags;
@@ -1551,6 +1562,7 @@
     Object delegateTo;  // OPT: merge with "value"
     Method getter;
     Method setter;
+    boolean setterReturnsValue;
 }




Fergus Gallagher wrote:

> I am having problems getting my head around contexts and scopes and my
> multi-threaded application fall over.
>
> If I set "global=false" the following code used a per-thread
> initStandardObject() and this seems to work.  But when I set
> "global=true", the global "parentScope" is used and I get some wierd
> errors.
>
> If I change "__CODE__.slice(0,5)" to
> 1. "__CODE__" - works
> 2. "__CODE__.substring(0,5)" - fails
> 3. "__CODE__.toString()" - works
>
> Any help appreciated.
>
> Fergus
>
> ===== Test.java =========================================
> import java.io.*;
> import org.mozilla.javascript.*;
>
> public class Test implements Runnable {
>         private Script script;
>         private Scriptable parentScope;
>         private String __CODE__="ABCDEFGHIJK";
>         private boolean global = true;
>         private static Context globalContext = null;
>         public Test() throws Exception {
>                 String js= "java.lang.System.out.println(__CODE__.slice(0,5));";
>                 globalContext.setCompileFunctionsWithDynamicScope(false);
>                 parentScope = globalContext.initStandardObjects(null);
>                 StringReader sr = new StringReader(js);
>                 script = globalContext.compileReader(parentScope, sr, "(compiled)",
> 1,null);
>         }
>
>         public void run() {
>                 try {
>                         Context context = Context.enter();
>                         Scriptable threadScope;
>                         if (global) {
>                                 threadScope = context.newObject(parentScope);
>                                 threadScope.setPrototype(parentScope);
>                                 threadScope.setParentScope(null);
>                         } else {
>                                 threadScope = context.initStandardObjects(null);
>                         }
>                         threadScope.put("__CODE__",threadScope,__CODE__);
>                         script.exec(context,threadScope);
>                 }
>                 catch (Exception e) {
>                         System.err.println(e.getClass().getName()+":
"+e.getMessage());
>                 }
>                 finally {
>                         Context.exit();
>                 }
>         }
>
>         public static void main(String args[]) throws Exception {
>         globalContext = Context.enter();
>                 Test me = new Test();
>                 int count=10;
>                 Thread[] threads = new Thread[count];
>                 for (int i=0; i<count; i++) {
>                         Thread t = new Thread(me);
>                         threads[i] = t;
>                         t.start();
>                 }
>                 for (int i=0; i<count; i++) {
>                         threads[i].join();
>                 }
>                 Context.exit();
>         }
> }
>
> ==== OUTPUT ===============================================
> ABCDE
> ABCDE
> org.mozilla.javascript.EcmaError: undefined is not a function.
> org.mozilla.javascript.EvaluatorException: Constructor for "String" not
> found.
> org.mozilla.javascript.EvaluatorException: Constructor for "String" not
> found.
> org.mozilla.javascript.EvaluatorException: Constructor for "String" not
> found.
> org.mozilla.javascript.EvaluatorException: Constructor for "String" not
> found.
> org.mozilla.javascript.EvaluatorException: Constructor for "String" not
> found.
> org.mozilla.javascript.EvaluatorException: Constructor for "String" not
> found.
> org.mozilla.javascript.EvaluatorException: Constructor for "String" not
> found.
> ===========================================================
>
> The number and type of exceptions is highly variable from run to run -
> anywhere from 1-9 out of 10.
> The EcmaError in particular only happens occasionally.
>
> --
> Fergus Gallagher          Tel: +44 (20) 8 987 0717
> Orbis                     Fax: +44 (20) 8 742 2649
> The Swan Centre           email: Fergus.Gallagher@orbisuk.com
> Fishers Lane              Web: http://www.orbisuk.com
> London W4 1RX / UK
2000-07-03 18:40:35 +00:00
jband%netscape.com a49977b549 updating readme. Not part of build 2000-07-02 19:37:57 +00:00
cls%seawood.org e1e6c5760f Removed obsolete REQUIRES variable from every Makefile.in/makefile.win 2000-06-30 08:08:04 +00:00
jband%netscape.com 9ec0b005fc Fix dogfood/crash bugs: 42750, 39858 and fix 43897 and improve JS/XPConnect error reporting to help with crasher 40792. r=mccabe@netscape.com. 2000-06-30 04:04:46 +00:00
beard%netscape.com ae75194337 Fix build bustage. 2000-06-29 18:40:58 +00:00
rogerl%netscape.com 289a28647c use handleDot for call, too. 2000-06-29 18:30:47 +00:00
beard%netscape.com 14a33e366c delete property support. 2000-06-29 18:14:14 +00:00
beard%netscape.com 6cbfacc80c DELETE_PROP 2000-06-29 18:13:46 +00:00
beard%netscape.com 9d7d45fa72 DELETE_PROP 2000-06-29 17:14:56 +00:00
beard%netscape.com b713041cec added DELETE_PROP instruction to implement the "delete" operation. 2000-06-29 17:11:50 +00:00
beard%netscape.com 9a805c2a95 unused parameter warning 2000-06-29 05:48:09 +00:00
beard%netscape.com cbf9cb60d0 complementary operator delete(void*, JSClass*). 2000-06-29 05:46:36 +00:00
beard%netscape.com b3c8568faa some classes to test js2 with. 2000-06-29 04:49:48 +00:00
beard%netscape.com 4db6e8e886 updated dependencies 2000-06-29 04:25:10 +00:00
beard%netscape.com ac2fd0c4c1 Changed StaticCall to use static slot. 2000-06-29 04:23:56 +00:00
beard%netscape.com 5cfc10557a Fixing static dotted expressions. 2000-06-29 04:23:20 +00:00
beard%netscape.com aef07e6b97 now uses conditional compilation #if defined(OPCODE_NAMES), so that a simple "icode.h" can be included by vmtypes.h and vmtypes.cpp. 2000-06-29 04:21:00 +00:00
beard%netscape.com d059b655ef moved all machine generated classes, etc. to icode.h. 2000-06-29 04:19:19 +00:00
beard%netscape.com da44337f32 Generated by tools/gencode.pl. 2000-06-29 04:18:16 +00:00
beard%netscape.com ea4574b835 fixed static calls. 2000-06-29 03:15:52 +00:00
rogerl%netscape.com 8d0b4fe645 Implicit this and class lookup stuff. 2000-06-29 01:21:41 +00:00
cls%seawood.org d7e09e3e95 wrap ifndef XPCONNECT_STANDALONE around xpconnect test components that require external interfaces. Thanks to Mark Adams <madams@janna.com> for the patch. Bug 42026 2000-06-28 22:53:55 +00:00
beard%netscape.com 6df39dd186 implemented JSClass::printProperties(). 2000-06-28 19:46:13 +00:00
beard%netscape.com 3436603e6b Enhanced printing of types. 2000-06-28 19:45:44 +00:00
beard%netscape.com d2acc1ba67 Type of a JSType* is Type_Type (wow, recursive). Changed mBaseType to be JSType* instead of const JSType*. 2000-06-28 19:45:09 +00:00
rogerl%netscape.com b5f49320b8 First set of unified 'dot' handling changes for statics. 2000-06-28 18:41:30 +00:00
beard%netscape.com a18901a26b added jsclasses.h 2000-06-28 18:10:04 +00:00
beard%netscape.com c1a38ed9f4 Fix string <. 2000-06-28 16:38:20 +00:00
beard%netscape.com 9be70600fd Fixed dynamic lookup of static slots. Added code to compare strings. 2000-06-28 16:32:52 +00:00
beard%netscape.com 33919341f2 GET_STATIC/SET_STATIC/STATIC_XCR now use an index rather than a name. Implemented GET_PROP/SET_PROP for class objects (looks up slot dynamically, etc.) 2000-06-28 16:15:06 +00:00
beard%netscape.com c9b03781ae GET_STATIC/SET_STATIC/STATIC_XCR now use an index rather than a name. Now using JSClass::hasStatic() rather than looking up statics in class' scope. 2000-06-28 16:14:18 +00:00
beard%netscape.com 9755202d7e GET_STATIC/SET_STATIC/STATIC_XCR now use an index rather than a name. 2000-06-28 16:13:12 +00:00
beard%netscape.com b3b52a1138 Static slots. 2000-06-28 16:11:54 +00:00
cls%seawood.org 8e8437f9fd Tweaks to build xpconnect standalone. Bug #42024. Thanks to Mark Adams <madams@janna.com> for the patches. 2000-06-28 07:03:13 +00:00
beard%netscape.com b76277c865 Win-specific operator== noise. 2000-06-27 03:52:56 +00:00
beard%netscape.com 42f735d5df Fixed unitialized static class members. 2000-06-27 03:43:40 +00:00
beard%netscape.com cda9175d80 addSlot -> defineSlot, added defineStatic. 2000-06-27 03:42:42 +00:00
brendan%mozilla.org a17ba70026 Not again\! 2000-06-27 03:29:49 +00:00
beard%netscape.com 6bc554cd25 Fixed type management. 2000-06-27 03:21:33 +00:00
brendan%mozilla.org 326fe4c9b8 Fix my stupid missing comma bustage. 2000-06-27 03:17:47 +00:00
rogerl%netscape.com b3fecb38fa lots of stuff me and Patrick did 2000-06-27 02:39:32 +00:00
brendan%mozilla.org 1a3dbef568 Fix JS_SetPrototype and __proto__ setting to deal with shared scopes; use JSObjectOps for setProto and setParent operations, and add spare op slots (41126, r=shaver@mozilla.org,pschwartau@netscape.com). 2000-06-27 02:37:25 +00:00
beard%netscape.com b3158ce94f JSValue::operator==: added CASE(type) to fix warning. 2000-06-26 17:47:07 +00:00
beard%netscape.com 5c98bc5892 added JSObject::deleteProperty(), and changed mName in JSType to be a JSString. Need to revisit other uses of String soon. 2000-06-26 17:42:20 +00:00
beard%netscape.com f7dd6dbe83 simplified string addition 2000-06-26 17:25:25 +00:00
beard%netscape.com 65ba0e5b4c defined JSStringBase, and constructors from in JSString 2000-06-26 17:24:57 +00:00
beard%netscape.com 6a014e14e7 String addition: don't share structure with LHS. 2000-06-26 17:09:27 +00:00
beard%netscape.com 8df08ef410 added constructor from JSString&. 2000-06-26 16:55:01 +00:00
beard%netscape.com ef32468a54 Reset register usage after generating each initializer statement. 2000-06-26 15:19:45 +00:00
beard%netscape.com 0b99360f25 Simplified NEW_CLASS, using a single do .. while loop, introducing nextPC instruction iterator to simplify initial case. now calls all defined constructors. 2000-06-26 15:06:36 +00:00
beard%netscape.com 75649210c7 Only call non-null constructors. 2000-06-25 17:04:38 +00:00