diff options
author | Simon Rettberg | 2022-03-21 17:22:16 +0100 |
---|---|---|
committer | Simon Rettberg | 2022-03-21 17:22:16 +0100 |
commit | ad0788e8fbead90d1ab03ba1a5c83b00114cb3a0 (patch) | |
tree | af62b617fb6149afce16d417474abd49f373cbf9 /dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java | |
parent | [client] Cleanup chunk data lists when upload finished or is cancelled (diff) | |
download | tutor-module-ad0788e8fbead90d1ab03ba1a5c83b00114cb3a0.tar.gz tutor-module-ad0788e8fbead90d1ab03ba1a5c83b00114cb3a0.tar.xz tutor-module-ad0788e8fbead90d1ab03ba1a5c83b00114cb3a0.zip |
[client] Memory management; handle OOM when hashing, do not skip blocks
Try to free some references regarding transfers earlier, e.g. the hash
worker and list of hashes as soon as hashing is finished on upload, not
only when the upload is finished and the window is closed.
Properly delay hashing of blocks in OOM scenarios, and be more
conservative with the number of hash workers, i.e. take maximum JVM
memory into account.
Also, improve thread naming.
Diffstat (limited to 'dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java')
-rw-r--r-- | dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java index 6b8c5a94..7e56b0e8 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/activity/UploadPanel.java @@ -34,7 +34,7 @@ public class UploadPanel extends TransferPanel implements QuitNotification { private static final Logger LOGGER = LogManager.getLogger(UploadPanel.class); - private final UploadInitiator state; + private UploadInitiator state; private final UploadPanel panel = this; @@ -59,26 +59,33 @@ public class UploadPanel extends TransferPanel implements QuitNotification { private class ButtonAction implements ActionListener { @Override public void actionPerformed(ActionEvent e) { + if (state == null) + return; + state.getUploadTask().removeListener(panel); if (!state.getUploadTask().isCanceled()) { if (!Gui.showMessageBox(panel, I18n.ACTIVITY.getString("UploadPanel.Message.yesNo.cancelTransfer"), MessageType.QUESTION_YESNO, null, null)) return; + final UploadInitiator fstate = state; QuickTimer.scheduleOnce(new Task() { @Override public void fire() { - state.cancelError("UploadPanel: Requested by user through button press"); + fstate.cancelError("UploadPanel: Requested by user through button press"); } }); } - state.getUploadTask().removeListener(panel); close(); + state = null; } } private class SscToggle implements ActionListener { @Override public void actionPerformed(ActionEvent e) { + if (state == null) + return; final UploadOptions options = new UploadOptions(chkServerSideCopy.isSelected()); + final UploadInitiator fstate = state; QuickTimer.scheduleOnce(new Task() { @Override public void fire() { @@ -86,7 +93,7 @@ public class UploadPanel extends TransferPanel implements QuitNotification { UploadOptions newOpt = null; try { newOpt = ThriftManager.getSatClient().setUploadOptions(Session.getSatelliteToken(), - state.getToken(), options); + fstate.getToken(), options); } catch (TAuthorizationException | TInvalidTokenException e) { dis = true; } catch (TException e) { @@ -117,6 +124,13 @@ public class UploadPanel extends TransferPanel implements QuitNotification { @Override public void onApplicationQuit() { // Application quit, tell server we cancel + if (state == null) + return; state.cancelError("Application quit (via UploadPanel)"); } + + @Override + protected void releaseResources() { + state = null; + } } |