Skip to content

Commit

Permalink
Fix comment
Browse files Browse the repository at this point in the history
  • Loading branch information
arturobernalg committed Oct 11, 2023
1 parent 026ba28 commit 2a81421
Show file tree
Hide file tree
Showing 9 changed files with 238 additions and 179 deletions.
3 changes: 2 additions & 1 deletion jspwiki-event/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,9 @@
</dependency>

<dependency>
<groupId>org.apache.jspwiki</groupId>
<groupId>${project.groupId}</groupId>
<artifactId>jspwiki-util</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,18 @@ public final class WikiEventManager {
*
* @see java.util.concurrent.locks.ReentrantLock
*/
private static final ReentrantLock lock = new ReentrantLock();
private static final ReentrantLock instanceLock = new ReentrantLock();
private static final ReentrantLock removeWikiEventListenerLock = new ReentrantLock();
private static final ReentrantLock delegatesLockLock = new ReentrantLock();
private static final ReentrantLock preloadCacheLock = new ReentrantLock();
private static final ReentrantLock delegateForLock = new ReentrantLock();
private static final ReentrantLock wikiEventListenersLock = new ReentrantLock();
private static final ReentrantLock wikiEventListenerLock = new ReentrantLock();
private static final ReentrantLock removeWikiEventListenerLock2 = new ReentrantLock();
private static final ReentrantLock isListeningLock = new ReentrantLock();
private static final ReentrantLock fireEventLock = new ReentrantLock();




/** Constructor for a WikiEventManager. */
Expand All @@ -169,7 +180,7 @@ private WikiEventManager() {
*/
public static WikiEventManager getInstance() {
if (c_instance == null) {
Synchronizer.synchronize(lock, () -> {
Synchronizer.synchronize(instanceLock, () -> {
if (c_instance == null) {
c_instance = new WikiEventManager();
// start up any post-instantiation services here
Expand Down Expand Up @@ -258,7 +269,7 @@ public static boolean removeWikiEventListener( final WikiEventListener listener
// get the Map.entry object for the entire Map, then check match on entry (listener)
final WikiEventManager mgr = getInstance();
final Map< Object, WikiEventDelegate > sources = Collections.synchronizedMap( mgr.getDelegates() );
Synchronizer.synchronize(lock, () -> {
Synchronizer.synchronize(removeWikiEventListenerLock, () -> {
// get an iterator over the Map.Enty objects in the map
for( final Map.Entry< Object, WikiEventDelegate > entry : sources.entrySet() ) {
// the entry value is the delegate
Expand All @@ -274,8 +285,8 @@ public static boolean removeWikiEventListener( final WikiEventListener listener
}

private void removeDelegates() {
Synchronizer.synchronize(lock, m_delegates::clear);
Synchronizer.synchronize(lock, m_preloadCache::clear);
Synchronizer.synchronize(delegatesLockLock, m_delegates::clear);
Synchronizer.synchronize(preloadCacheLock, m_preloadCache::clear);
}

public static void shutdown() {
Expand Down Expand Up @@ -327,7 +338,7 @@ private Map< Object, WikiEventDelegate > getDelegates() {
* @return the WikiEventDelegate.
*/
private WikiEventDelegate getDelegateFor(final Object client) {
return Synchronizer.synchronize(lock, () -> {
return Synchronizer.synchronize(delegateForLock, () -> {
if (client == null || client instanceof Class) { // then preload the cache
final WikiEventDelegate delegate = new WikiEventDelegate(client);
m_preloadCache.add(delegate);
Expand Down Expand Up @@ -398,7 +409,7 @@ private static final class WikiEventDelegate {
* @throws java.lang.UnsupportedOperationException if any attempt is made to modify the Set
*/
public Set< WikiEventListener > getWikiEventListeners() {
return Synchronizer.synchronize(lock, () -> {
return Synchronizer.synchronize(wikiEventListenersLock, () -> {
final TreeSet< WikiEventListener > set = new TreeSet<>( new WikiEventListenerComparator() );
for( final WeakReference< WikiEventListener > wikiEventListenerWeakReference : m_listenerList ) {
final WikiEventListener l = wikiEventListenerWeakReference.get();
Expand All @@ -418,7 +429,7 @@ public Set< WikiEventListener > getWikiEventListeners() {
* @return true if the listener was added (i.e., it was not already in the list and was added)
*/
public boolean addWikiEventListener( final WikiEventListener listener ) {
return Synchronizer.synchronize(lock, () -> {
return Synchronizer.synchronize(wikiEventListenerLock, () -> {
final boolean listenerAlreadyContained = m_listenerList.stream()
.map( WeakReference::get )
.anyMatch( ref -> ref == listener );
Expand All @@ -436,7 +447,7 @@ public boolean addWikiEventListener( final WikiEventListener listener ) {
* @return true if the listener was removed (i.e., it was actually in the list and was removed)
*/
public boolean removeWikiEventListener( final WikiEventListener listener ) {
return Synchronizer.synchronize(lock, () -> {
return Synchronizer.synchronize(removeWikiEventListenerLock2, () -> {
for (final Iterator<WeakReference<WikiEventListener>> i = m_listenerList.iterator(); i.hasNext(); ) {
final WikiEventListener l = i.next().get();
if (l == listener) {
Expand All @@ -452,7 +463,7 @@ public boolean removeWikiEventListener( final WikiEventListener listener ) {
* Returns true if there are one or more listeners registered with this instance.
*/
public boolean isListening() {
return Synchronizer.synchronize(lock, () -> !m_listenerList.isEmpty());
return Synchronizer.synchronize(isListeningLock, () -> !m_listenerList.isEmpty());
}

/**
Expand All @@ -461,7 +472,7 @@ public boolean isListening() {
public void fireEvent(final WikiEvent event) {
final AtomicBoolean needsCleanup = new AtomicBoolean(false);
try {
Synchronizer.synchronize(lock, () -> {
Synchronizer.synchronize(fireEventLock, () -> {
for (final WeakReference<WikiEventListener> wikiEventListenerWeakReference : m_listenerList) {
final WikiEventListener listener = wikiEventListenerWeakReference.get();
if (listener != null) {
Expand Down
24 changes: 14 additions & 10 deletions jspwiki-main/src/main/java/org/apache/wiki/WatchDog.java
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,13 @@ public final class WatchDog {
*
* @see java.util.concurrent.locks.ReentrantLock
*/
private final ReentrantLock lock;
private final ReentrantLock watchDogLock = new ReentrantLock();
private final ReentrantLock enableLock = new ReentrantLock();
private final ReentrantLock disableLock = new ReentrantLock();
private final ReentrantLock enterStateLock = new ReentrantLock();
private final ReentrantLock exitStateLock = new ReentrantLock();
private final ReentrantLock checkLock = new ReentrantLock();
private final ReentrantLock toStringLock = new ReentrantLock();

/**
* Returns the current watchdog for the current thread. This is the preferred method of getting you a Watchdog, since it
Expand Down Expand Up @@ -104,9 +110,7 @@ public WatchDog( final Engine engine, final Watchable watch ) {
m_engine = engine;
m_watchable = watch;

lock = new ReentrantLock();

Synchronizer.synchronize(lock, () -> {
Synchronizer.synchronize(watchDogLock, () -> {
if (c_watcherThread == null) {
c_watcherThread = new WatchDogThread(engine);
c_watcherThread.start();
Expand Down Expand Up @@ -150,7 +154,7 @@ private static void scrub() {
* Can be used to enable the WatchDog. Will cause a new Thread to be created, if none was existing previously.
*/
public void enable() {
Synchronizer.synchronize(lock, () -> {
Synchronizer.synchronize(enableLock, () -> {
if( !m_enabled ) {
m_enabled = true;
c_watcherThread = new WatchDogThread( m_engine );
Expand All @@ -163,7 +167,7 @@ public void enable() {
* Is used to disable a WatchDog. The watchdog thread is shut down and resources released.
*/
public void disable() {
Synchronizer.synchronize(lock, () -> {
Synchronizer.synchronize(disableLock, () -> {
if( m_enabled ) {
m_enabled = false;
c_watcherThread.shutdown();
Expand Down Expand Up @@ -200,7 +204,7 @@ public void enterState( final String state ) {
*/
public void enterState( final String state, final int expectedCompletionTime ) {
LOG.debug( "{}: Entering state {}, expected completion in {} s", m_watchable.getName(), state, expectedCompletionTime );
Synchronizer.synchronize(lock, () -> {
Synchronizer.synchronize(enterStateLock, () -> {
final State st = new State( state, expectedCompletionTime );
m_stateStack.push( st );
});
Expand All @@ -222,7 +226,7 @@ public void exitState() {
*/
public void exitState( final String state ) {
if( !m_stateStack.empty() ) {
Synchronizer.synchronize(lock, () -> {
Synchronizer.synchronize(exitStateLock, () -> {
final State st = m_stateStack.peek();
if( state == null || st.getState().equals( state ) ) {
m_stateStack.pop();
Expand Down Expand Up @@ -258,7 +262,7 @@ public boolean isWatchableAlive() {

private void check() {
LOG.debug( "Checking watchdog '{}'", m_watchable.getName() );
Synchronizer.synchronize(lock, () -> {
Synchronizer.synchronize(checkLock, () -> {
if( !m_stateStack.empty() ) {
final State st = m_stateStack.peek();
final long now = System.currentTimeMillis();
Expand Down Expand Up @@ -315,7 +319,7 @@ private void dumpStackTraceForWatchable() {
*/
@Override
public String toString() {
return Synchronizer.synchronize(lock, () -> {
return Synchronizer.synchronize(toStringLock, () -> {
String state = "Idle";

if( !m_stateStack.empty() ) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,12 @@ public class SessionMonitor implements HttpSessionListener {
*
* @see ReentrantLock
*/
private final ReentrantLock lock;
private final ReentrantLock createGuestSessionForLock;
private final ReentrantLock removeLock;
private final ReentrantLock userPrincipalsLock;
private final ReentrantLock addWikiEventListenerLock;
private final ReentrantLock removeWikiEventListenerLock;


/**
* Returns the instance of the SessionMonitor for this wiki. Only one SessionMonitor exists per Engine.
Expand All @@ -94,7 +99,11 @@ public static SessionMonitor getInstance( final Engine engine ) {

/** Construct the SessionListener */
public SessionMonitor() {
lock = new ReentrantLock();
createGuestSessionForLock = new ReentrantLock();
removeLock = new ReentrantLock();
userPrincipalsLock = new ReentrantLock();
addWikiEventListenerLock = new ReentrantLock();
removeWikiEventListenerLock = new ReentrantLock();
}

private SessionMonitor( final Engine engine ) {
Expand Down Expand Up @@ -186,7 +195,7 @@ public final Session find( final String sessionId ) {
private Session createGuestSessionFor( final String sessionId ) {
LOG.debug( "Session for session ID={}... not found. Creating guestSession()", sessionId );
final Session wikiSession = Wiki.session().guest( m_engine );
Synchronizer.synchronize(lock, () -> {
Synchronizer.synchronize(createGuestSessionForLock, () -> {
m_sessions.put(sessionId, wikiSession);
});
return wikiSession;
Expand All @@ -213,7 +222,7 @@ public final void remove( final HttpSession session ) {
if( session == null ) {
throw new IllegalArgumentException( "Session cannot be null." );
}
Synchronizer.synchronize(lock, () -> {
Synchronizer.synchronize(removeLock, () -> {
m_sessions.remove( session.getId() );
});
}
Expand All @@ -237,7 +246,7 @@ public final int sessions()
* @return the array of user principals
*/
public final Principal[] userPrincipals() {
final Collection<Principal> principals = Synchronizer.synchronize(lock, () ->
final Collection<Principal> principals = Synchronizer.synchronize(userPrincipalsLock, () ->
m_sessions.values().stream().map(Session::getUserPrincipal).collect(Collectors.toList()));

final Principal[] p = principals.toArray(new Principal[0]);
Expand All @@ -252,7 +261,7 @@ public final Principal[] userPrincipals() {
* @since 2.4.75
*/
public final void addWikiEventListener( final WikiEventListener listener ) {
Synchronizer.synchronize(lock, () -> {
Synchronizer.synchronize(addWikiEventListenerLock, () -> {
WikiEventManager.addWikiEventListener( this, listener );
});
}
Expand All @@ -264,7 +273,7 @@ public final void addWikiEventListener( final WikiEventListener listener ) {
* @since 2.4.75
*/
public final void removeWikiEventListener(final WikiEventListener listener) {
Synchronizer.synchronize(lock, () -> {
Synchronizer.synchronize(removeWikiEventListenerLock, () -> {
WikiEventManager.removeWikiEventListener(this, listener);
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,10 +85,22 @@ public class DefaultGroupManager implements GroupManager, Authorizer, WikiEventL
*
* @see java.util.concurrent.locks.ReentrantLock
*/
private final ReentrantLock lock;
private final ReentrantLock initializeLock;
private final ReentrantLock removeGroupLock;
private final ReentrantLock setGroupLock;
private final ReentrantLock setGroupLockPut;
private final ReentrantLock setGroupLockCatch;
private final ReentrantLock addWikiEventListenerLock;
private final ReentrantLock removeWikiEventListenerLock;

public DefaultGroupManager() {
lock = new ReentrantLock();
initializeLock = new ReentrantLock();
removeGroupLock = new ReentrantLock();
setGroupLock = new ReentrantLock();
setGroupLockPut = new ReentrantLock();
setGroupLockCatch = new ReentrantLock();
addWikiEventListenerLock = new ReentrantLock();
removeWikiEventListenerLock = new ReentrantLock();
}

/** {@inheritDoc} */
Expand Down Expand Up @@ -168,7 +180,7 @@ public void initialize( final Engine engine, final Properties props ) throws Wik

// Load all groups from the database into the cache
final Group[] groups = m_groupDatabase.groups();
Synchronizer.synchronize(lock, () -> {
Synchronizer.synchronize(initializeLock, () -> {
for( final Group group : groups ) {
// Add new group to cache; fire GROUP_ADD event
m_groups.put( group.getPrincipal(), group );
Expand Down Expand Up @@ -269,7 +281,7 @@ public void removeGroup( final String index ) throws WikiSecurityException {

// Delete the group
// TODO: need rollback procedure
Synchronizer.synchronize(lock, () -> {
Synchronizer.synchronize(removeGroupLock, () -> {
m_groups.remove( group.getPrincipal() );
});
m_groupDatabase.delete( group );
Expand All @@ -285,7 +297,7 @@ public void setGroup( final Session session, final Group group ) throws WikiSecu
final Group oldGroup = m_groups.get( group.getPrincipal() );
if( oldGroup != null ) {
fireEvent( WikiSecurityEvent.GROUP_REMOVE, oldGroup );
Synchronizer.synchronize(lock, () -> {
Synchronizer.synchronize(setGroupLock, () -> {
m_groups.remove( oldGroup.getPrincipal() );
});
}
Expand All @@ -299,7 +311,7 @@ public void setGroup( final Session session, final Group group ) throws WikiSecu
}

// Add new group to cache; announce GROUP_ADD event
Synchronizer.synchronize(lock, () -> {
Synchronizer.synchronize(setGroupLockPut, () -> {
m_groups.put( group.getPrincipal(), group );
});
fireEvent( WikiSecurityEvent.GROUP_ADD, group );
Expand All @@ -316,7 +328,7 @@ public void setGroup( final Session session, final Group group ) throws WikiSecu
// Restore previous version, re-throw...
fireEvent( WikiSecurityEvent.GROUP_REMOVE, group );
fireEvent( WikiSecurityEvent.GROUP_ADD, oldGroup );
Synchronizer.synchronize(lock, () -> {
Synchronizer.synchronize(setGroupLockCatch, () -> {
m_groups.put( oldGroup.getPrincipal(), oldGroup );
});
throw new WikiSecurityException( e.getMessage() + " (rolled back to previous version).", e );
Expand Down Expand Up @@ -384,15 +396,15 @@ protected String[] extractMembers( final String memberLine ) {
/** {@inheritDoc} */
@Override
public void addWikiEventListener( final WikiEventListener listener ) {
Synchronizer.synchronize(lock, () -> {
Synchronizer.synchronize(addWikiEventListenerLock, () -> {
WikiEventManager.addWikiEventListener( this, listener );
});
}

/** {@inheritDoc} */
@Override
public void removeWikiEventListener( final WikiEventListener listener ) {
Synchronizer.synchronize(lock, () -> {
Synchronizer.synchronize(removeWikiEventListenerLock, () -> {
WikiEventManager.removeWikiEventListener( this, listener );
});
}
Expand Down
Loading

0 comments on commit 2a81421

Please sign in to comment.