Skip to content

Commit

Permalink
fine tune
Browse files Browse the repository at this point in the history
  • Loading branch information
jumperchen committed Apr 15, 2015
1 parent e652703 commit 383f86a
Showing 1 changed file with 46 additions and 32 deletions.
78 changes: 46 additions & 32 deletions zk/src/org/zkoss/zk/ui/impl/SimpleDesktopCache.java
Expand Up @@ -66,13 +66,13 @@ public int getNextKey() {
}
}
public Desktop getDesktopIfAny(String desktopId) {
synchronized (_desktops) {
final boolean old = _desktops.disableExpunge(true);
try {
final boolean old = _desktops.disableExpunge(true);
try {
synchronized (_desktops) {
return _desktops.get(desktopId);
} finally {
_desktops.disableExpunge(old);
}
} finally {
_desktops.disableExpunge(old);
}
}
public Desktop getDesktop(String desktopId) {
Expand All @@ -85,16 +85,18 @@ public Desktop getDesktop(String desktopId) {
return desktop;
}
public void addDesktop(Desktop desktop) {
final boolean added;
//final boolean added;
final Desktop old;
synchronized (_desktops) {
old = _desktops.put(desktop.getId(), desktop);
}
if (old != null) {
_desktops.put((old).getId(), old); //recover
log.warn(
desktop == old ? "Register a desktop twice: "+desktop:
"Replicated ID: "+desktop+"; already used by "+old);
if (log.isWarnEnabled()) {
log.warn(
desktop == old ? "Register a desktop twice: "+desktop:
"Replicated ID: "+desktop+"; already used by "+old);
}
}
//if (log.isDebugEnabled()) log.debug("After added, desktops: "+_desktops);
}
Expand Down Expand Up @@ -161,43 +163,55 @@ private static void desktopDestroyed(Desktop desktop) {
* desktops it cached.
*/
public void sessionWillPassivate(Session sess) {
synchronized (_desktops) {
final boolean old = _desktops.disableExpunge(true);
try {
for (Desktop desktop: _desktops.values())
((DesktopCtrl)desktop).sessionWillPassivate(sess);
} finally {
_desktops.disableExpunge(old);
final boolean old = _desktops.disableExpunge(true);
try {
ArrayList<Desktop> desktops = null;
synchronized (_desktops) {
desktops = new ArrayList<Desktop>(_desktops.values());
}

for (Desktop desktop : desktops)
((DesktopCtrl) desktop).sessionWillPassivate(sess);

} finally {
_desktops.disableExpunge(old);
}
}
/** Invokes {@link DesktopCtrl#sessionDidActivate} for each
* desktops it cached.
*/
public void sessionDidActivate(Session sess) {
synchronized (_desktops) {
final boolean old = _desktops.disableExpunge(true);
try {
for (Desktop desktop: _desktops.values())
((DesktopCtrl)desktop).sessionDidActivate(sess);
} finally {
_desktops.disableExpunge(old);
final boolean old = _desktops.disableExpunge(true);

try {
ArrayList<Desktop> desktops = null;
synchronized (_desktops) {
desktops = new ArrayList<Desktop>(_desktops.values());
}

for (Desktop desktop: desktops)
((DesktopCtrl)desktop).sessionDidActivate(sess);

} finally {
_desktops.disableExpunge(old);
}
}

public void stop() {
synchronized (_desktops) {
if (log.isDebugEnabled()) log.debug("Invalidated and remove: "+_desktops);
final boolean old = _desktops.disableExpunge(true);
try {
for (Desktop desktop: new ArrayList<Desktop>(_desktops.values())) {
desktopDestroyed(desktop);
}
if (log.isDebugEnabled())
log.debug("Invalidated and remove: " + _desktops);
final boolean old = _desktops.disableExpunge(true);
try {
ArrayList<Desktop> desktops = null;
synchronized (_desktops) {
desktops = new ArrayList<Desktop>(_desktops.values());
_desktops.clear();
} finally {
_desktops.disableExpunge(old);
}
for (Desktop desktop: desktops) {
desktopDestroyed(desktop);
}
} finally {
_desktops.disableExpunge(old);
}
}

Expand Down

0 comments on commit 383f86a

Please sign in to comment.