Skip to content

Commit

Permalink
Fixed sessions not saving on shutdown
Browse files Browse the repository at this point in the history
  • Loading branch information
me4502 committed Aug 19, 2018
1 parent 41c307a commit 4d0df10
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 29 deletions.
Expand Up @@ -150,7 +150,7 @@ private void loadAdapter() {
@Override
public void onDisable() {
WorldEdit worldEdit = WorldEdit.getInstance();
worldEdit.getSessionManager().clear();
worldEdit.getSessionManager().unload();
worldEdit.getPlatformManager().unregister(server);
if (config != null) {
config.unload();
Expand Down
Expand Up @@ -266,13 +266,50 @@ public synchronized void remove(SessionOwner owner) {
sessions.remove(getKey(owner));
}

/**
* Called to unload this session manager.
*/
public synchronized void unload() {
clear();
}

/**
* Remove all sessions.
*/
public synchronized void clear() {
saveChangedSessions();
sessions.clear();
}

private synchronized void saveChangedSessions() {
long now = System.currentTimeMillis();
Iterator<SessionHolder> it = sessions.values().iterator();
Map<SessionKey, LocalSession> saveQueue = new HashMap<>();

while (it.hasNext()) {
SessionHolder stored = it.next();
if (stored.key.isActive()) {
stored.lastActive = now;

if (stored.session.compareAndResetDirty()) {
saveQueue.put(stored.key, stored.session);
}
} else {
if (now - stored.lastActive > EXPIRATION_GRACE) {
if (stored.session.compareAndResetDirty()) {
saveQueue.put(stored.key, stored.session);
}

it.remove();
}
}
}

if (!saveQueue.isEmpty()) {
commit(saveQueue);
}
}

@Subscribe
public void onConfigurationLoad(ConfigurationLoadEvent event) {
LocalConfiguration config = event.getConfiguration();
Expand Down Expand Up @@ -302,32 +339,7 @@ private class SessionTracker extends TimerTask {
@Override
public void run() {
synchronized (SessionManager.this) {
long now = System.currentTimeMillis();
Iterator<SessionHolder> it = sessions.values().iterator();
Map<SessionKey, LocalSession> saveQueue = new HashMap<>();

while (it.hasNext()) {
SessionHolder stored = it.next();
if (stored.key.isActive()) {
stored.lastActive = now;

if (stored.session.compareAndResetDirty()) {
saveQueue.put(stored.key, stored.session);
}
} else {
if (now - stored.lastActive > EXPIRATION_GRACE) {
if (stored.session.compareAndResetDirty()) {
saveQueue.put(stored.key, stored.session);
}

it.remove();
}
}
}

if (!saveQueue.isEmpty()) {
commit(saveQueue);
}
saveChangedSessions();
}
}
}
Expand Down
Expand Up @@ -136,7 +136,9 @@ public void serverAboutToStart(FMLServerAboutToStartEvent event) {

@EventHandler
public void serverStopping(FMLServerStoppingEvent event) {
WorldEdit.getInstance().getPlatformManager().unregister(platform);
WorldEdit worldEdit = WorldEdit.getInstance();
worldEdit.getSessionManager().unload();
worldEdit.getPlatformManager().unregister(platform);
}

@EventHandler
Expand Down
Expand Up @@ -147,7 +147,9 @@ public void serverAboutToStart(GameAboutToStartServerEvent event) {

@Listener
public void serverStopping(GameStoppingServerEvent event) {
WorldEdit.getInstance().getPlatformManager().unregister(platform);
WorldEdit worldEdit = WorldEdit.getInstance();
worldEdit.getSessionManager().unload();
worldEdit.getPlatformManager().unregister(platform);
}

@Listener
Expand Down

0 comments on commit 4d0df10

Please sign in to comment.