Baseflow / Baseflow/flutter_cache_manager

Race condition when downloading the same URL with ignoreMemCache=true

Ouverte
#338 1 commentaire 2 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
Dart
Étoiles
809
Forks
510
Merge moyen
6 min
PR mergées (30 j)
1

Description

## 🐛 Bug Report

I have been seeing the following error message in `flutter_cache_manager` version `3.1.2`:

```
I/flutter (26728): 2021-10-02 16:48:34.376318 SEVERE main - [guarded]
I/flutter (26728): ### _CastError: Null check operator used on a null value
I/flutter (26728): #0 WebHelper._downloadOrAddToQueue (package:flutter_cache_manager/src/web/web_helper.dart:65:33)
I/flutter (26728): #1 WebHelper._checkQueue (package:flutter_cache_manager/src/web/web_helper.dart:84:5)
I/flutter (26728): #2 WebHelper._downloadOrAddToQueue (package:flutter_cache_manager/src/web/web_helper.dart:77:7)
I/flutter (26728):
```

### Reproduction steps

I think this happens when I download the same URL at the same time with `ignoreMemCache=true`

In WebHelper if the `downloadFile` method is called with the same URL/key the `Subject` of `_memCache` is overwritten:

https://github.com/Baseflow/flutter_cache_manager/blob/f591b5383de3188115a5140daba4d0a05a3a7a10/flutter_cache_manager/lib/src/web/web_helper.dart#L44-L46

But the first request still deletes it from `_memCache` without checking if it was ignored during the download call:

https://github.com/Baseflow/flutter_cache_manager/blob/f591b5383de3188115a5140daba4d0a05a3a7a10/flutter_cache_manager/lib/src/web/web_helper.dart#L73-L76

I'm actually not sure the `ignoreMemCache` flag does what I want it to do.

Basically I want to force a redownload of the URL without clearing the cache item first.

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez dans flutter_cache_manager/lib/src/web/web_helper.dart, en particulier au niveau de l’affectation de _memCache vers les lignes 44-46 et du nettoyage vers les lignes 73-76. Reproduisez des téléchargements concurrents de la même URL avec ignoreMemCache=true et suivez la manière dont le Subject est remplacé puis supprimé. C’est terminé lorsque la condition de concurrence ne provoque plus l’erreur de null-check, tout en préservant le comportement prévu de forçage d’un nouveau téléchargement.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
dart, flutter
Domaine
mobile-dev
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.