File: lib_ksi_queue.h

package info (click to toggle)
rsyslog 8.2512.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky
  • size: 30,464 kB
  • sloc: ansic: 123,809; sh: 42,109; makefile: 5,962; javascript: 1,842; python: 1,222; lex: 607; yacc: 193; perl: 162; sql: 103; tcl: 9; ruby: 2
file content (53 lines) | stat: -rw-r--r-- 1,710 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#ifndef INCLUDED_LIBRSKSI_QUEUE_H
#define INCLUDED_LIBRSKSI_QUEUE_H

#include <stdint.h>
#include <stdbool.h>
#include <pthread.h>

#define RB_GROW_FACTOR 2

typedef struct RingBuffer_st {
    void** buffer;
    size_t size;
    size_t count;
    size_t head;
    size_t tail;
} RingBuffer;

RingBuffer* RingBuffer_new(size_t size);
void RingBuffer_free(RingBuffer* this);
bool RingBuffer_pushBack(RingBuffer* this, void* item);
bool RingBuffer_popFront(RingBuffer* this, void** item);
bool RingBuffer_peekFront(RingBuffer* this, void** item);
bool RingBuffer_getItem(RingBuffer* this, size_t index, void** item);
size_t RingBuffer_count(RingBuffer* this);

typedef struct ProtectedQueue_st {
    bool bStop;
    RingBuffer* workItems;
    pthread_mutex_t mutex;
    pthread_cond_t condition;
} ProtectedQueue;

ProtectedQueue* ProtectedQueue_new(size_t queueSize);
void ProtectedQueue_free(ProtectedQueue* this);
void ProtectedQueue_stop(ProtectedQueue* this);
bool ProtectedQueue_addItem(ProtectedQueue* this, void* item);
bool ProtectedQueue_peekFront(ProtectedQueue* this, void** item);
bool ProtectedQueue_popFront(ProtectedQueue* this, void** item);
size_t ProtectedQueue_popFrontBatch(ProtectedQueue* this, void** items, size_t bufSize);
int ProtectedQueue_waitForItem(ProtectedQueue* this, void** item, uint64_t timeout);
size_t ProtectedQueue_count(ProtectedQueue* this);
bool ProtectedQueue_getItem(ProtectedQueue* this, size_t index, void** item);

typedef struct WorkerThreadContext_st {
    bool (*workerFunc)(void*);
    bool (*timeoutFunc)(void);
    ProtectedQueue* queue;
    unsigned timeout;
} WorkerThreadContext;

void* worker_thread_main(void* arg);

#endif  // INCLUDED_LIBRSKSI_QUEUE_H