mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-20 11:04:34 +02:00
6608764: PropertyChangeListeners machinery should have a better locking scheme
Change to use a private final object java.awt.Component.changeSupportLock for locking purposes instead of using this Reviewed-by: son, ant
This commit is contained in:
parent
9e5bc6d8bf
commit
2095e90fb0
1 changed files with 51 additions and 31 deletions
|
@ -634,6 +634,11 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
||||||
*/
|
*/
|
||||||
private PropertyChangeSupport changeSupport;
|
private PropertyChangeSupport changeSupport;
|
||||||
|
|
||||||
|
private transient final Object changeSupportLock = new Object();
|
||||||
|
private Object getChangeSupportLock() {
|
||||||
|
return changeSupportLock;
|
||||||
|
}
|
||||||
|
|
||||||
boolean isPacked = false;
|
boolean isPacked = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -7839,8 +7844,9 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
||||||
* @see #getPropertyChangeListeners
|
* @see #getPropertyChangeListeners
|
||||||
* @see #addPropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener)
|
* @see #addPropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener)
|
||||||
*/
|
*/
|
||||||
public synchronized void addPropertyChangeListener(
|
public void addPropertyChangeListener(
|
||||||
PropertyChangeListener listener) {
|
PropertyChangeListener listener) {
|
||||||
|
synchronized (getChangeSupportLock()) {
|
||||||
if (listener == null) {
|
if (listener == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -7849,6 +7855,7 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
||||||
}
|
}
|
||||||
changeSupport.addPropertyChangeListener(listener);
|
changeSupport.addPropertyChangeListener(listener);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes a PropertyChangeListener from the listener list. This method
|
* Removes a PropertyChangeListener from the listener list. This method
|
||||||
|
@ -7863,13 +7870,15 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
||||||
* @see #getPropertyChangeListeners
|
* @see #getPropertyChangeListeners
|
||||||
* @see #removePropertyChangeListener(java.lang.String,java.beans.PropertyChangeListener)
|
* @see #removePropertyChangeListener(java.lang.String,java.beans.PropertyChangeListener)
|
||||||
*/
|
*/
|
||||||
public synchronized void removePropertyChangeListener(
|
public void removePropertyChangeListener(
|
||||||
PropertyChangeListener listener) {
|
PropertyChangeListener listener) {
|
||||||
|
synchronized (getChangeSupportLock()) {
|
||||||
if (listener == null || changeSupport == null) {
|
if (listener == null || changeSupport == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
changeSupport.removePropertyChangeListener(listener);
|
changeSupport.removePropertyChangeListener(listener);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an array of all the property change listeners
|
* Returns an array of all the property change listeners
|
||||||
|
@ -7885,12 +7894,14 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
||||||
* @see java.beans.PropertyChangeSupport#getPropertyChangeListeners
|
* @see java.beans.PropertyChangeSupport#getPropertyChangeListeners
|
||||||
* @since 1.4
|
* @since 1.4
|
||||||
*/
|
*/
|
||||||
public synchronized PropertyChangeListener[] getPropertyChangeListeners() {
|
public PropertyChangeListener[] getPropertyChangeListeners() {
|
||||||
|
synchronized (getChangeSupportLock()) {
|
||||||
if (changeSupport == null) {
|
if (changeSupport == null) {
|
||||||
return new PropertyChangeListener[0];
|
return new PropertyChangeListener[0];
|
||||||
}
|
}
|
||||||
return changeSupport.getPropertyChangeListeners();
|
return changeSupport.getPropertyChangeListeners();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds a PropertyChangeListener to the listener list for a specific
|
* Adds a PropertyChangeListener to the listener list for a specific
|
||||||
|
@ -7923,9 +7934,10 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
||||||
* @see #getPropertyChangeListeners(java.lang.String)
|
* @see #getPropertyChangeListeners(java.lang.String)
|
||||||
* @see #addPropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener)
|
* @see #addPropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener)
|
||||||
*/
|
*/
|
||||||
public synchronized void addPropertyChangeListener(
|
public void addPropertyChangeListener(
|
||||||
String propertyName,
|
String propertyName,
|
||||||
PropertyChangeListener listener) {
|
PropertyChangeListener listener) {
|
||||||
|
synchronized (getChangeSupportLock()) {
|
||||||
if (listener == null) {
|
if (listener == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -7934,6 +7946,7 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
||||||
}
|
}
|
||||||
changeSupport.addPropertyChangeListener(propertyName, listener);
|
changeSupport.addPropertyChangeListener(propertyName, listener);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes a <code>PropertyChangeListener</code> from the listener
|
* Removes a <code>PropertyChangeListener</code> from the listener
|
||||||
|
@ -7951,14 +7964,16 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
||||||
* @see #getPropertyChangeListeners(java.lang.String)
|
* @see #getPropertyChangeListeners(java.lang.String)
|
||||||
* @see #removePropertyChangeListener(java.beans.PropertyChangeListener)
|
* @see #removePropertyChangeListener(java.beans.PropertyChangeListener)
|
||||||
*/
|
*/
|
||||||
public synchronized void removePropertyChangeListener(
|
public void removePropertyChangeListener(
|
||||||
String propertyName,
|
String propertyName,
|
||||||
PropertyChangeListener listener) {
|
PropertyChangeListener listener) {
|
||||||
|
synchronized (getChangeSupportLock()) {
|
||||||
if (listener == null || changeSupport == null) {
|
if (listener == null || changeSupport == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
changeSupport.removePropertyChangeListener(propertyName, listener);
|
changeSupport.removePropertyChangeListener(propertyName, listener);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an array of all the listeners which have been associated
|
* Returns an array of all the listeners which have been associated
|
||||||
|
@ -7974,13 +7989,15 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
||||||
* @see #getPropertyChangeListeners
|
* @see #getPropertyChangeListeners
|
||||||
* @since 1.4
|
* @since 1.4
|
||||||
*/
|
*/
|
||||||
public synchronized PropertyChangeListener[] getPropertyChangeListeners(
|
public PropertyChangeListener[] getPropertyChangeListeners(
|
||||||
String propertyName) {
|
String propertyName) {
|
||||||
|
synchronized (getChangeSupportLock()) {
|
||||||
if (changeSupport == null) {
|
if (changeSupport == null) {
|
||||||
return new PropertyChangeListener[0];
|
return new PropertyChangeListener[0];
|
||||||
}
|
}
|
||||||
return changeSupport.getPropertyChangeListeners(propertyName);
|
return changeSupport.getPropertyChangeListeners(propertyName);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Support for reporting bound property changes for Object properties.
|
* Support for reporting bound property changes for Object properties.
|
||||||
|
@ -7994,7 +8011,10 @@ public abstract class Component implements ImageObserver, MenuContainer,
|
||||||
*/
|
*/
|
||||||
protected void firePropertyChange(String propertyName,
|
protected void firePropertyChange(String propertyName,
|
||||||
Object oldValue, Object newValue) {
|
Object oldValue, Object newValue) {
|
||||||
PropertyChangeSupport changeSupport = this.changeSupport;
|
PropertyChangeSupport changeSupport;
|
||||||
|
synchronized (getChangeSupportLock()) {
|
||||||
|
changeSupport = this.changeSupport;
|
||||||
|
}
|
||||||
if (changeSupport == null ||
|
if (changeSupport == null ||
|
||||||
(oldValue != null && newValue != null && oldValue.equals(newValue))) {
|
(oldValue != null && newValue != null && oldValue.equals(newValue))) {
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue