aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2025-05-04 21:52:17 +0200
committerdec05eba <dec05eba@protonmail.com>2025-05-04 21:52:17 +0200
commita409f3b3c36f3e7490edff3101c4260da3a90b8a (patch)
treee50c61a4945481a3f66fa944894972ab4828a395 /src
parent36c74d3411a543c4452d367275182e0a8619cec4 (diff)
Fix replay to disk not working properly when restarting replay
Diffstat (limited to 'src')
-rw-r--r--src/main.cpp4
-rw-r--r--src/replay_buffer/replay_buffer_disk.c13
2 files changed, 11 insertions, 6 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 6471dbc..42be868 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1301,12 +1301,12 @@ static void save_replay_async(AVCodecContext *video_codec_context, int video_str
replay_packet_data = gsr_replay_buffer_iterator_get_packet_data(cloned_replay_buffer, replay_iterator);
if(!replay_packet) {
- fprintf(stderr, "no replay packet\n");
+ fprintf(stderr, "gsr error: save_replay_async: no replay packet\n");
break;
}
if(!replay_packet->data && !replay_packet_data) {
- fprintf(stderr, "no replay packet data\n");
+ fprintf(stderr, "gsr error: save_replay_async: no replay packet data\n");
break;
}
diff --git a/src/replay_buffer/replay_buffer_disk.c b/src/replay_buffer/replay_buffer_disk.c
index 0716f3b..85d8fa7 100644
--- a/src/replay_buffer/replay_buffer_disk.c
+++ b/src/replay_buffer/replay_buffer_disk.c
@@ -95,19 +95,19 @@ static void gsr_replay_buffer_file_unref(gsr_replay_buffer_file *self, const cha
static void gsr_replay_buffer_disk_clear(gsr_replay_buffer *replay_buffer) {
gsr_replay_buffer_disk *self = (gsr_replay_buffer_disk*)replay_buffer;
gsr_replay_buffer_lock(&self->replay_buffer);
+
for(size_t i = 0; i < self->num_files; ++i) {
gsr_replay_buffer_file_unref(self->files[i], self->replay_directory);
}
self->num_files = 0;
- gsr_replay_buffer_unlock(&self->replay_buffer);
if(self->storage_fd > 0) {
close(self->storage_fd);
self->storage_fd = 0;
}
- self->storage_counter = 0;
self->storage_num_bytes_written = 0;
+ gsr_replay_buffer_unlock(&self->replay_buffer);
}
static void gsr_replay_buffer_disk_destroy(gsr_replay_buffer *replay_buffer) {
@@ -236,16 +236,21 @@ static uint8_t* gsr_replay_buffer_disk_iterator_get_packet_data(gsr_replay_buffe
char filename[PATH_MAX];
snprintf(filename, sizeof(filename), "%s/%s_%d.mp4", self->replay_directory, FILE_PREFIX, (int)file->id);
file->fd = open(filename, O_RDONLY);
- if(file->fd <= 0)
+ if(file->fd <= 0) {
+ fprintf(stderr, "gsr error: gsr_replay_buffer_disk_iterator_get_packet_data: failed to open file\n");
return NULL;
+ }
}
const gsr_av_packet_disk *packet = &self->files[iterator.file_index]->packets[iterator.packet_index];
- if(lseek(file->fd, packet->data_index, SEEK_SET) == -1)
+ if(lseek(file->fd, packet->data_index, SEEK_SET) == -1) {
+ fprintf(stderr, "gsr error: gsr_replay_buffer_disk_iterator_get_packet_data: failed to seek\n");
return NULL;
+ }
uint8_t *packet_data = malloc(packet->packet.size);
if(read(file->fd, packet_data, packet->packet.size) != packet->packet.size) {
+ fprintf(stderr, "gsr error: gsr_replay_buffer_disk_iterator_get_packet_data: failed to read data from file\n");
free(packet_data);
return NULL;
}