File: _kisupport_threadsafe_fifo_queue.h

package info (click to toggle)
python-kinterbasdb 3.3.0-2
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 2,432 kB
  • ctags: 1,830
  • sloc: ansic: 16,803; python: 3,514; makefile: 63; sh: 22
file content (54 lines) | stat: -rw-r--r-- 1,731 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
54
/* KInterbasDB Python Package - Header File for ThreadSafeFIFOQueue
 *
 * Version 3.3
 *
 * The following contributors hold Copyright (C) over their respective
 * portions of code (see license.txt for details):
 *
 * [Original Author (maintained through version 2.0-0.3.1):]
 *   1998-2001 [alex]  Alexander Kuznetsov   <alexan@users.sourceforge.net>
 * [Maintainers (after version 2.0-0.3.1):]
 *   2001-2002 [maz]   Marek Isalski         <kinterbasdb@maz.nu>
 *   2002-2007 [dsr]   David Rushby          <woodsplitter@rocketmail.com>
 * [Contributors:]
 *   2001      [eac]   Evgeny A. Cherkashin  <eugeneai@icc.ru>
 *   2001-2002 [janez] Janez Jere            <janez.jere@void.si>            */

#ifndef _KISUPPORT_THREADSAFE_FIFO_QUEUE_H
#define _KISUPPORT_THREADSAFE_FIFO_QUEUE_H

#include "_kisupport.h"

typedef void (*QueueNodeDelFunc)(void *);

typedef struct _QueueNode {
  volatile void *payload;
  volatile QueueNodeDelFunc payload_del_func;

  volatile struct _QueueNode *next;
} QueueNode;

typedef struct {
  PlatformMutexType lock;

  /* There are so many subtle differences between pthread_cond_t objects and
   * Windows Event objects that it's less error-prone to ifdef the operations
   * inline than to try to build a uniform abstraction.
   * Clients of the queue aren't aware of what synch primitives it's using
   * under the hood anyway, so the platform-specificity doesn't leak into other
   * parts of the code base. */
  #ifdef PLATFORM_WINDOWS
    HANDLE
  #else
    pthread_cond_t
  #endif
  not_empty;

  volatile boolean cancelled;
  volatile boolean closed;

  volatile QueueNode *head;
  volatile QueueNode *tail;
} ThreadSafeFIFOQueue;

#endif /* if not def _KISUPPORT_THREADSAFE_FIFO_QUEUE_H */