Skip to content

Commit f25b2bf

Browse files
authored
Merge pull request #208 from NordicSemiconductor/bugfix/upload-cancelation
Bugfix: Fixed crash when upload gets cancelled in the wrong moment, part 2
2 parents de9f189 + b173d68 commit f25b2bf

File tree

2 files changed

+32
-4
lines changed

2 files changed

+32
-4
lines changed

mcumgr-core/src/main/java/io/runtime/mcumgr/dfu/suit/task/UploadEnvelope.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@ class UploadEnvelope extends SUITUpgradeTask {
1818
private final static Logger LOG = LoggerFactory.getLogger(UploadEnvelope.class);
1919
private final byte @NotNull [] envelope;
2020
private final boolean deferInstall;
21+
private boolean canceled = false;
2122

2223
/**
2324
* Upload controller used to pause, resume, and cancel upload. Set when the upload is started.
2425
*/
26+
@Nullable
2527
private TransferController mUploadController;
2628

2729
public UploadEnvelope(final byte @NotNull [] envelope, final boolean deferInstall) {
@@ -72,6 +74,12 @@ public void onUploadCompleted() {
7274
}
7375
};
7476

77+
// Check if the task was canceled before starting the upload.
78+
if (canceled) {
79+
callback.onUploadCanceled();
80+
return;
81+
}
82+
7583
LOG.info("Uploading SUIT envelope of size: {}", envelope.length);
7684
final SUITUpgradePerformer.Settings settings = performer.getSettings();
7785
final SUITManager manager = new SUITManager(performer.getTransport());
@@ -86,11 +94,17 @@ public void onUploadCompleted() {
8694

8795
@Override
8896
public void pause() {
89-
mUploadController.pause();
97+
if (mUploadController != null) {
98+
mUploadController.pause();
99+
}
90100
}
91101

92102
@Override
93103
public void cancel() {
94-
mUploadController.cancel();
104+
if (mUploadController != null) {
105+
mUploadController.cancel();
106+
} else {
107+
canceled = true;
108+
}
95109
}
96110
}

mcumgr-core/src/main/java/io/runtime/mcumgr/dfu/suit/task/UploadResource.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@ class UploadResource extends SUITUpgradeTask {
1919

2020
private final byte @NotNull [] data;
2121
private final int sessionId;
22+
private boolean canceled = false;
2223

2324
/**
2425
* Upload controller used to pause, resume, and cancel upload. Set when the upload is started.
2526
*/
27+
@Nullable
2628
private TransferController mUploadController;
2729

2830
public UploadResource(
@@ -79,6 +81,12 @@ public void onUploadCompleted() {
7981
}
8082
};
8183

84+
// Check if the task was canceled before starting the upload.
85+
if (canceled) {
86+
callback.onUploadCanceled();
87+
return;
88+
}
89+
8290
LOG.info("Uploading resource with session ID: {} ({} bytes)", sessionId, data.length);
8391
final SUITUpgradePerformer.Settings settings = performer.getSettings();
8492
final SUITManager manager = new SUITManager(performer.getTransport());
@@ -93,11 +101,17 @@ public void onUploadCompleted() {
93101

94102
@Override
95103
public void pause() {
96-
mUploadController.pause();
104+
if (mUploadController != null) {
105+
mUploadController.pause();
106+
}
97107
}
98108

99109
@Override
100110
public void cancel() {
101-
mUploadController.cancel();
111+
if (mUploadController != null) {
112+
mUploadController.cancel();
113+
} else {
114+
canceled = true;
115+
}
102116
}
103117
}

0 commit comments

Comments
 (0)