File: msgqueue.h

package info (click to toggle)
gross 1.0.2-3
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 1,568 kB
  • sloc: sh: 8,835; ansic: 6,994; makefile: 50; xml: 45
file content (67 lines) | stat: -rw-r--r-- 2,072 bytes parent folder | download | duplicates (6)
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/* $Id: msgqueue.h 319 2008-04-19 08:24:17Z eino.tuominen $ */

/*
 * Copyright (c) 2006,2007
 *               Eino Tuominen <eino@utu.fi>
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

#ifndef MSGQUEUE_H
#define MSGQUEUE_H

typedef struct msg_s
{
	void *msgp;
	size_t msgsz;
	struct msg_s *next;
	struct timespec timestamp;
} msg_t;

typedef struct msgqueue_s
{
	pthread_cond_t cv;
	pthread_mutex_t mx;
	msg_t *head;
	msg_t *tail;
	int msgcount;
	struct msgqueue_s *delaypair;
	const struct timespec *delay_ts;
	int *impose_delay;	/* both the queues point to the same int */
	bool active;
	int id;
} msgqueue_t;

typedef struct
{
	msgqueue_t *inq;
	msgqueue_t *outq;
} queue_info_t;

int get_queue(void);
int get_delay_queue(const struct timespec *ts);
int disable_delay(int msqid);
int enable_delay(int msqid);
int set_delay(int msqid, const struct timespec *ts);
int put_msg(int msqid, void *msgp, size_t msgsz, int msgflg);
int instant_msg(int msqid, void *msgp, size_t msgsz, int msgflg);
int release_queue(int msqid);
size_t get_msg(int msqid, void *msgp, size_t maxsize, int msgflag);
size_t get_msg_timed(int msqid, void *msgp, size_t maxsize, int msgflag, mseconds_t timeout);
size_t in_queue_len(int msgid);
size_t out_queue_len(int msgid);
int queue_freeze(int msgid);
int queue_thaw(int msgid);
int walk_queue(int msgid, int (*callback) (void *));

#endif /* MSGQUEUE_H */