[P1][audio] Ancrer la capture live à un descripteur unique #5

Open
opened 2026-07-31 21:05:10 +00:00 by mathieu · 1 comment
Owner

Constat

Chaque poll live et la finalisation rouvrent recording.wav par son chemin (internal/audio/live.go:54-103, internal/audio/wav/wav.go:257-270). Un remplacement concurrent peut mélanger plusieurs inodes. os.Chmod(path) peut aussi suivre un symlink substitué avant le rejet WAV.

Tâche

Ouvrir une fois la capture avec O_NOFOLLOW dès readiness, puis faire polling, fchmod, validation finale et snapshots depuis des duplicatas de ce descripteur. Vérifier l'identité finale et supprimer le chmod par chemin.

Critères d'acceptation

  • Un remplacement du pathname n'altère aucun segment ou termine en audio_failed.
  • Aucune cible de symlink ne change de mode.
  • Tous les descripteurs sont fermés après Release et Abort.
  • Le fichier validé est bien celui écrit par le processus capturé.

Validation

go test -count=50 -race ./internal/audio ./internal/audio/pwrecord ./internal/audio/wav

## Constat Chaque poll live et la finalisation rouvrent `recording.wav` par son chemin (`internal/audio/live.go:54-103`, `internal/audio/wav/wav.go:257-270`). Un remplacement concurrent peut mélanger plusieurs inodes. `os.Chmod(path)` peut aussi suivre un symlink substitué avant le rejet WAV. ## Tâche Ouvrir une fois la capture avec `O_NOFOLLOW` dès readiness, puis faire polling, `fchmod`, validation finale et snapshots depuis des duplicatas de ce descripteur. Vérifier l'identité finale et supprimer le `chmod` par chemin. ## Critères d'acceptation - Un remplacement du pathname n'altère aucun segment ou termine en `audio_failed`. - Aucune cible de symlink ne change de mode. - Tous les descripteurs sont fermés après `Release` et `Abort`. - Le fichier validé est bien celui écrit par le processus capturé. ## Validation `go test -count=50 -race ./internal/audio ./internal/audio/pwrecord ./internal/audio/wav`

Correctif proposé et validé dans la PR #43 : #43.

Correctif proposé et validé dans la PR #43 : https://git.2027a.net/mathieu/murmur/pulls/43.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
mathieu/murmur#5
No description provided.