diff options
author | Kay Ramme <kr@openoffice.org> | 2001-02-26 17:26:36 +0000 |
---|---|---|
committer | Kay Ramme <kr@openoffice.org> | 2001-02-26 17:26:36 +0000 |
commit | 53a6fd00952dcbd645a57043fd77bc78c0bbd779 (patch) | |
tree | 0df7103b899f3cfc5b745fba84e730c2c2b06c95 /jurt | |
parent | 446e5876a05c5e05aaedde04be9d64c564a481de (diff) |
merged changes from 1.2 - 1.2.4.1 (synchronize incs, decs, _objects)
Diffstat (limited to 'jurt')
-rw-r--r-- | jurt/com/sun/star/lib/uno/environments/java/java_environment.java | 49 |
1 files changed, 27 insertions, 22 deletions
diff --git a/jurt/com/sun/star/lib/uno/environments/java/java_environment.java b/jurt/com/sun/star/lib/uno/environments/java/java_environment.java index 345fddd43c86..a5358cab3caa 100644 --- a/jurt/com/sun/star/lib/uno/environments/java/java_environment.java +++ b/jurt/com/sun/star/lib/uno/environments/java/java_environment.java @@ -2,9 +2,9 @@ * * $RCSfile: java_environment.java,v $ * - * $Revision: 1.3 $ + * $Revision: 1.4 $ * - * last change: $Author: kr $ $Date: 2001-01-16 18:01:25 $ + * last change: $Author: kr $ $Date: 2001-02-26 18:26:36 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -92,7 +92,7 @@ import com.sun.star.uno.XInterface; * interface defined in the uno runtime. * <p> * <p> - * @version $Revision: 1.3 $ $ $Date: 2001-01-16 18:01:25 $ + * @version $Revision: 1.4 $ $ $Date: 2001-02-26 18:26:36 $ * @author Kay Ramme * @see com.sun.star.uno.UnoRuntime * @see com.sun.star.uno.IEnvironment @@ -212,15 +212,16 @@ public class java_environment implements IEnvironment, Disposable { Holder(String oId, Object object) { _oId = oId; _object = object; + _refCount = 1; } - void incRefCount() { + synchronized void incRefCount() { if(DEBUG) System.err.println("##### " + getClass().getName() + ".incRefCount:" + _refCount); ++ _refCount; } - void decRefCount() { + synchronized void decRefCount() { if(DEBUG) System.err.println("##### " + getClass().getName() + ".decRefCount:" + _refCount); -- _refCount; @@ -317,23 +318,25 @@ public class java_environment implements IEnvironment, Disposable { String keyName = oId[0] + type; - // get the holder - Holder holder = (Holder)_objects.get(keyName); + synchronized(_objects) { + // get the holder + Holder holder = (Holder)_objects.get(keyName); - if(DEBUG) - System.err.println("##### " + getClass().getName() + ".registerInterface:" + object + " " + oId[0] + " " + type); + if(DEBUG) + System.err.println("##### " + getClass().getName() + ".registerInterface:" + object + " " + oId[0] + " " + type); - if(holder == null) { - holder = new Holder(keyName, object); + if(holder == null) { + holder = new Holder(keyName, object); - _objects.put(keyName, holder); - } + _objects.put(keyName, holder); + } + else + holder.incRefCount(); - // get the holder again, so we dont have to guard this section and are thread safe - holder = (Holder)_objects.get(keyName); - holder.incRefCount(); + object = holder.xxgetObject(type); + } - return holder.xxgetObject(type); + return object; } /** @@ -345,11 +348,13 @@ public class java_environment implements IEnvironment, Disposable { */ public void revokeInterface(String oId, Type type) { if(DEBUG) System.err.println("##### " + getClass().getName() + ".revokeInterface:" + oId + " " + type); - Holder holder = (Holder)_objects.get(oId + type); - if(holder != null) - holder.decRefCount(); - else - System.err.println("java_environment.revokeInterface - unknown oid:" + oId + " " + type); + synchronized(_objects) { + Holder holder = (Holder)_objects.get(oId + type); + if(holder != null) + holder.decRefCount(); + else + System.err.println("java_environment.revokeInterface - unknown oid:" + oId + " " + type); + } } /** |