Skip to content

Commit d0b6fcf

Browse files
authored
fix(storage, android): fix concurrency issue (#10099)
1 parent 071c4d5 commit d0b6fcf

File tree

1 file changed

+5
-13
lines changed

1 file changed

+5
-13
lines changed

packages/firebase_storage/firebase_storage/android/src/main/java/io/flutter/plugins/firebase/storage/FlutterFirebaseStorageTask.java

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,9 @@ private FlutterFirebaseStorageTask(
5858
this.bytes = bytes;
5959
this.fileUri = fileUri;
6060
this.metadata = metadata;
61-
inProgressTasks.put(handle, this);
61+
synchronized (inProgressTasks) {
62+
inProgressTasks.put(handle, this);
63+
}
6264
}
6365

6466
@Nullable
@@ -72,12 +74,7 @@ static void cancelInProgressTasks() {
7274
synchronized (inProgressTasks) {
7375
for (int i = 0; i < inProgressTasks.size(); i++) {
7476
FlutterFirebaseStorageTask task = null;
75-
try {
76-
task = inProgressTasks.valueAt(i);
77-
} catch (ArrayIndexOutOfBoundsException e) {
78-
// TODO(Salakar): Why does this happen? Race condition / multiple destroy calls?
79-
// Can safely ignore exception for now, see https://github.com/firebase/flutterfire/issues/4334
80-
}
77+
task = inProgressTasks.valueAt(i);
8178
if (task != null) {
8279
task.destroy();
8380
}
@@ -150,12 +147,7 @@ void destroy() {
150147
if (storageTask.isInProgress() || storageTask.isPaused()) {
151148
storageTask.cancel();
152149
}
153-
try {
154-
inProgressTasks.remove(handle);
155-
} catch (ArrayIndexOutOfBoundsException e) {
156-
// TODO(Salakar): Why does this happen? Race condition / multiple destroy calls?
157-
// Can safely ignore exception for now, see https://github.com/firebase/flutterfire/issues/4334
158-
}
150+
inProgressTasks.remove(handle);
159151
}
160152

161153
synchronized (cancelSyncObject) {

0 commit comments

Comments
 (0)