@@ -174,6 +174,7 @@ - (FIRStorageUploadTask *)putData:(NSData *)uploadData
174174 metadata: metadata];
175175
176176 if (completion) {
177+ __block BOOL completed = NO ;
177178 dispatch_queue_t callbackQueue = _storage.fetcherServiceForApp .callbackQueue ;
178179 if (!callbackQueue) {
179180 callbackQueue = dispatch_get_main_queue ();
@@ -182,13 +183,19 @@ - (FIRStorageUploadTask *)putData:(NSData *)uploadData
182183 [task observeStatus: FIRStorageTaskStatusSuccess
183184 handler: ^(FIRStorageTaskSnapshot *_Nonnull snapshot) {
184185 dispatch_async (callbackQueue, ^{
185- completion (snapshot.metadata , nil );
186+ if (!completed) {
187+ completed = YES ;
188+ completion (snapshot.metadata , nil );
189+ }
186190 });
187191 }];
188192 [task observeStatus: FIRStorageTaskStatusFailure
189193 handler: ^(FIRStorageTaskSnapshot *_Nonnull snapshot) {
190194 dispatch_async (callbackQueue, ^{
191- completion (nil , snapshot.error );
195+ if (!completed) {
196+ completed = YES ;
197+ completion (nil , snapshot.error );
198+ }
192199 });
193200 }];
194201 }
@@ -222,6 +229,7 @@ - (FIRStorageUploadTask *)putFile:(NSURL *)fileURL
222229 metadata: metadata];
223230
224231 if (completion) {
232+ __block BOOL completed = NO ;
225233 dispatch_queue_t callbackQueue = _storage.fetcherServiceForApp .callbackQueue ;
226234 if (!callbackQueue) {
227235 callbackQueue = dispatch_get_main_queue ();
@@ -230,13 +238,19 @@ - (FIRStorageUploadTask *)putFile:(NSURL *)fileURL
230238 [task observeStatus: FIRStorageTaskStatusSuccess
231239 handler: ^(FIRStorageTaskSnapshot *_Nonnull snapshot) {
232240 dispatch_async (callbackQueue, ^{
233- completion (snapshot.metadata , nil );
241+ if (!completed) {
242+ completed = YES ;
243+ completion (snapshot.metadata , nil );
244+ }
234245 });
235246 }];
236247 [task observeStatus: FIRStorageTaskStatusFailure
237248 handler: ^(FIRStorageTaskSnapshot *_Nonnull snapshot) {
238249 dispatch_async (callbackQueue, ^{
239- completion (nil , snapshot.error );
250+ if (!completed) {
251+ completed = YES ;
252+ completion (nil , snapshot.error );
253+ }
240254 });
241255 }];
242256 }
@@ -248,6 +262,7 @@ - (FIRStorageUploadTask *)putFile:(NSURL *)fileURL
248262
249263- (FIRStorageDownloadTask *)dataWithMaxSize : (int64_t )size
250264 completion : (FIRStorageVoidDataError)completion {
265+ __block BOOL completed = NO ;
251266 FIRStorageDownloadTask *task =
252267 [[FIRStorageDownloadTask alloc ] initWithReference: self
253268 fetcherService: _storage.fetcherServiceForApp
@@ -263,13 +278,20 @@ - (FIRStorageDownloadTask *)dataWithMaxSize:(int64_t)size
263278 handler: ^(FIRStorageTaskSnapshot *_Nonnull snapshot) {
264279 FIRStorageDownloadTask *task = snapshot.task ;
265280 dispatch_async (callbackQueue, ^{
266- completion (task.downloadData , nil );
281+ if (!completed) {
282+ completed = YES ;
283+ completion (task.downloadData , nil );
284+ }
267285 });
268286 }];
287+
269288 [task observeStatus: FIRStorageTaskStatusFailure
270289 handler: ^(FIRStorageTaskSnapshot *_Nonnull snapshot) {
271290 dispatch_async (callbackQueue, ^{
272- completion (nil , snapshot.error );
291+ if (!completed) {
292+ completed = YES ;
293+ completion (nil , snapshot.error );
294+ }
273295 });
274296 }];
275297 [task
@@ -302,6 +324,7 @@ - (FIRStorageDownloadTask *)writeToFile:(NSURL *)fileURL
302324 dispatchQueue: _storage.dispatchQueue
303325 file: fileURL];
304326 if (completion) {
327+ __block BOOL completed = NO ;
305328 dispatch_queue_t callbackQueue = _storage.fetcherServiceForApp .callbackQueue ;
306329 if (!callbackQueue) {
307330 callbackQueue = dispatch_get_main_queue ();
@@ -310,13 +333,19 @@ - (FIRStorageDownloadTask *)writeToFile:(NSURL *)fileURL
310333 [task observeStatus: FIRStorageTaskStatusSuccess
311334 handler: ^(FIRStorageTaskSnapshot *_Nonnull snapshot) {
312335 dispatch_async (callbackQueue, ^{
313- completion (fileURL, nil );
336+ if (!completed) {
337+ completed = YES ;
338+ completion (fileURL, nil );
339+ }
314340 });
315341 }];
316342 [task observeStatus: FIRStorageTaskStatusFailure
317343 handler: ^(FIRStorageTaskSnapshot *_Nonnull snapshot) {
318344 dispatch_async (callbackQueue, ^{
319- completion (nil , snapshot.error );
345+ if (!completed) {
346+ completed = YES ;
347+ completion (nil , snapshot.error );
348+ }
320349 });
321350 }];
322351 }
0 commit comments