bd9a1409f6
CI / lint (pull_request) Failing after 3s
CI / build-and-test (pull_request) Has been skipped
CI / sanitizers (address) (pull_request) Has been skipped
CI / sanitizers (undefined) (pull_request) Has been skipped
CI / fuzz-build (pull_request) Has been skipped
CI / coverage (pull_request) Has been skipped
CI / valgrind (pull_request) Has been skipped
- Restore PROTOCOL_VERSION to a forward-compatible 2.1.0 and document wire format - Add NULL guard to config_delete - Add pipeline cancellation flag and cancellation-aware queue helper - Join running threads before destroying pipeline contexts on creation failure - Fix NULL dereference and memory leaks in manifest/chunk handling - Fix TLS/TCP socket fd leak on connect error paths - Add compression-level range validation (1-22) - Close previous log file before opening a new one - Use getline for unbounded pattern-file lines - Fix thread-unsafe localtime() and add log level bounds check - Fix file_load_data to clean up data on read size mismatch - Add hard ceiling to decompression buffer growth - Fix mkdir_r bounds check and restore glob comments - Add send_str NULL guard and mutex-protect bandwidth limiter - Update AGENTS.md for per-thread io_ssl contract
31 lines
1.1 KiB
C
31 lines
1.1 KiB
C
#ifndef QUEUE_H
|
|
#define QUEUE_H
|
|
|
|
#include <stdbool.h>
|
|
#include <threads.h>
|
|
|
|
typedef struct Queue {
|
|
void** items;
|
|
int front;
|
|
int rear;
|
|
int size;
|
|
int capacity;
|
|
void (*item_destroyer)(void* item);
|
|
} Queue;
|
|
|
|
Queue* queue_create(int capacity, void (*destroyer)(void* item));
|
|
void queue_destroy(Queue* queue);
|
|
bool queue_is_empty(const Queue* queue);
|
|
bool queue_is_full(const Queue* queue);
|
|
bool queue_enqueue(Queue* queue, void* item);
|
|
bool queue_enqueue_multithreaded(Queue* queue, void* item, mtx_t* mutex, cnd_t* condition_not_empty,
|
|
cnd_t* condition_not_full);
|
|
bool queue_enqueue_multithreaded_cancel(Queue* queue, void* item, mtx_t* mutex,
|
|
cnd_t* condition_not_empty, cnd_t* condition_not_full,
|
|
const bool* cancelled);
|
|
void* queue_dequeue(Queue* queue);
|
|
void* queue_dequeue_multithreaded(Queue* queue, mtx_t* mutex, cnd_t* condition_not_empty,
|
|
cnd_t* condition_not_full, const bool* other_thread_done);
|
|
|
|
#endif
|