summaryrefslogtreecommitdiff
path: root/src/firehose.c
diff options
context:
space:
mode:
authorGravatar moon <moon@coffin.ir> 2025-09-15 03:49:50 +0330
committerGravatar moon <moon@coffin.ir> 2025-09-15 03:49:50 +0330
commit5b10e3d451bd538a7f5c0ac432dcc1b85c157a53 (patch)
tree69b60e5fe9aad5e36dc0a2f47f67c78c616ddea8 /src/firehose.c
parentperf opt in set_data_packet (diff)
add new opcode + firehose change
Diffstat (limited to 'src/firehose.c')
-rw-r--r--src/firehose.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/firehose.c b/src/firehose.c
index 6a4a134..c5d232d 100644
--- a/src/firehose.c
+++ b/src/firehose.c
@@ -6,7 +6,7 @@
#include <stdio.h>
#include <string.h>
-#define FIREHOSE_BUFFER_SIZE 1 << 14
+#define FIREHOSE_BUFFER_SIZE 1 << 15
typedef struct {
hash packet_hash;
@@ -14,10 +14,10 @@ typedef struct {
} water_splash;
typedef struct {
- water_splash entries[ FIREHOSE_BUFFER_SIZE ];
+ water_splash* entries;
uint16_t head;
uint16_t tail;
- uint16_t count;
+ uint32_t count;
uint64_t total_packets;
pthread_mutex_t mutex;
} fire_buffer;
@@ -30,8 +30,10 @@ uint16_t firehose_get_count(void);
uint64_t firehose_get_total_packets(void);
uint16_t firehose_get_packets(uint64_t offset, uint16_t count, water_splash* output_entries);
+void* alloc_map(uint64_t size);
+
void firehose_init(void) {
- memset(firehose_buffer.entries, 0, sizeof(firehose_buffer.entries));
+ firehose_buffer.entries = alloc_map(sizeof(water_splash) * FIREHOSE_BUFFER_SIZE);
firehose_buffer.head = 0;
firehose_buffer.tail = 0;
firehose_buffer.count = 0;
@@ -80,7 +82,6 @@ uint16_t firehose_get_packets(uint64_t offset, uint16_t count, water_splash* out
}
uint16_t start_index = (firehose_buffer.head + relative_offset) % FIREHOSE_BUFFER_SIZE;
- pthread_mutex_lock(&packet_storage_mutex);
for (int i = 0; i < count; i++) {
if (relative_offset + i >= firehose_buffer.count) { break; }
@@ -89,8 +90,7 @@ uint16_t firehose_get_packets(uint64_t offset, uint16_t count, water_splash* out
&output_entries[ i ], &firehose_buffer.entries[ current_index ], sizeof(water_splash));
copied_count++;
}
- pthread_mutex_unlock(&packet_storage_mutex);
pthread_mutex_unlock(&firehose_buffer.mutex);
return copied_count;
-}
+} \ No newline at end of file