Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 48040 Details for
Bug 149863
BundleContextImpl has unsync'ed access to EventListeners.
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
Fixes to correct unsynchronized references to BundleContextImpl's EventListener objects
patch.txt (text/plain), 4.76 KB, created by
BJ Hargrave
on 2006-08-16 13:32:48 EDT
(
hide
)
Description:
Fixes to correct unsynchronized references to BundleContextImpl's EventListener objects
Filename:
MIME Type:
Creator:
BJ Hargrave
Created:
2006-08-16 13:32:48 EDT
Size:
4.76 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.osgi >Index: core/framework/org/eclipse/osgi/framework/internal/core/BundleContextImpl.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/BundleContextImpl.java,v >retrieving revision 1.23 >diff -u -r1.23 BundleContextImpl.java >--- core/framework/org/eclipse/osgi/framework/internal/core/BundleContextImpl.java 21 Jun 2006 03:41:01 -0000 1.23 >+++ core/framework/org/eclipse/osgi/framework/internal/core/BundleContextImpl.java 16 Aug 2006 17:12:15 -0000 >@@ -92,21 +92,29 @@ > protected void close() { > valid = false; /* invalidate context */ > >- if (serviceEvent != null) { >- framework.serviceEvent.removeListener(this); >- serviceEvent = null; >- } >- if (frameworkEvent != null) { >- framework.frameworkEvent.removeListener(this); >- frameworkEvent = null; >- } >- if (bundleEvent != null) { >- framework.bundleEvent.removeListener(this); >- bundleEvent = null; >- } >- if (bundleEventSync != null) { >- framework.bundleEventSync.removeListener(this); >- bundleEventSync = null; >+ synchronized (framework.serviceEvent) { >+ if (serviceEvent != null) { >+ framework.serviceEvent.removeListener(this); >+ serviceEvent = null; >+ } >+ } >+ synchronized (framework.frameworkEvent) { >+ if (frameworkEvent != null) { >+ framework.frameworkEvent.removeListener(this); >+ frameworkEvent = null; >+ } >+ } >+ synchronized (framework.bundleEvent) { >+ if (bundleEvent != null) { >+ framework.bundleEvent.removeListener(this); >+ bundleEvent = null; >+ } >+ } >+ synchronized (framework.bundleEventSync) { >+ if (bundleEventSync != null) { >+ framework.bundleEventSync.removeListener(this); >+ bundleEventSync = null; >+ } > } > > /* service's registered by the bundle, if any, are unregistered. */ >@@ -348,8 +356,8 @@ > Debug.println("removeServiceListener[" + bundle + "](" + listenerName + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ > } > >- if (serviceEvent != null) { >- synchronized (framework.serviceEvent) { >+ synchronized (framework.serviceEvent) { >+ if (serviceEvent != null) { > serviceEvent.removeListener(listener); > } > } >@@ -423,14 +431,14 @@ > if (listener instanceof SynchronousBundleListener) { > framework.checkAdminPermission(getBundle(), AdminPermission.LISTENER); > >- if (bundleEventSync != null) { >- synchronized (framework.bundleEventSync) { >+ synchronized (framework.bundleEventSync) { >+ if (bundleEventSync != null) { > bundleEventSync.removeListener(listener); > } > } > } else { >- if (bundleEvent != null) { >- synchronized (framework.bundleEvent) { >+ synchronized (framework.bundleEvent) { >+ if (bundleEvent != null) { > bundleEvent.removeListener(listener); > } > } >@@ -489,8 +497,8 @@ > Debug.println("removeFrameworkListener[" + bundle + "](" + listenerName + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ > } > >- if (frameworkEvent != null) { >- synchronized (framework.frameworkEvent) { >+ synchronized (framework.frameworkEvent) { >+ if (frameworkEvent != null) { > frameworkEvent.removeListener(listener); > } > } >Index: core/framework/org/eclipse/osgi/framework/internal/core/Framework.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/Framework.java,v >retrieving revision 1.99 >diff -u -r1.99 Framework.java >--- core/framework/org/eclipse/osgi/framework/internal/core/Framework.java 26 Jul 2006 14:51:08 -0000 1.99 >+++ core/framework/org/eclipse/osgi/framework/internal/core/Framework.java 16 Aug 2006 17:12:15 -0000 >@@ -1554,19 +1554,27 @@ > ListenerQueue queue = (ListenerQueue) object; > switch (action) { > case BUNDLEEVENT : { >- queue.queueListeners(context.bundleEvent, context); >+ synchronized (bundleEvent) { >+ queue.queueListeners(context.bundleEvent, context); >+ } > break; > } > case BUNDLEEVENTSYNC : { >- queue.queueListeners(context.bundleEventSync, context); >+ synchronized (bundleEventSync) { >+ queue.queueListeners(context.bundleEventSync, context); >+ } > break; > } > case SERVICEEVENT : { >- queue.queueListeners(context.serviceEvent, context); >+ synchronized (serviceEvent) { >+ queue.queueListeners(context.serviceEvent, context); >+ } > break; > } > case FRAMEWORKEVENT : { >- queue.queueListeners(context.frameworkEvent, context); >+ synchronized (frameworkEvent) { >+ queue.queueListeners(context.frameworkEvent, context); >+ } > break; > } > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 149863
:
45857
|
47796
|
48040
|
48041