mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
Test code for shared memory message queue facility.
This code is intended as a demonstration of how the dynamic shared memory and dynamic background worker facilities can be used to establish a group of coooperating processes which can coordinate their activities using the shared memory message queue facility. By itself, the code does nothing particularly interesting: it simply allows messages to be passed through a loop of workers and back to the original process. But it's a useful unit test, in addition to its demonstration value.
This commit is contained in:
45
contrib/test_shm_mq/test_shm_mq.h
Normal file
45
contrib/test_shm_mq/test_shm_mq.h
Normal file
@ -0,0 +1,45 @@
|
||||
/*--------------------------------------------------------------------------
|
||||
*
|
||||
* test_shm_mq.h
|
||||
* Definitions for shared memory message queues
|
||||
*
|
||||
* Copyright (C) 2013, PostgreSQL Global Development Group
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* contrib/test_shm_mq/test_shm_mq.h
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef TEST_SHM_MQ_H
|
||||
#define TEST_SHM_MQ_H
|
||||
|
||||
#include "storage/dsm.h"
|
||||
#include "storage/shm_mq.h"
|
||||
#include "storage/spin.h"
|
||||
|
||||
/* Identifier for shared memory segments used by this extension. */
|
||||
#define PG_TEST_SHM_MQ_MAGIC 0x79fb2447
|
||||
|
||||
/*
|
||||
* This structure is stored in the dynamic shared memory segment. We use
|
||||
* it to determine whether all workers started up OK and successfully
|
||||
* attached to their respective shared message queues.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
slock_t mutex;
|
||||
int workers_total;
|
||||
int workers_attached;
|
||||
int workers_ready;
|
||||
} test_shm_mq_header;
|
||||
|
||||
/* Set up dynamic shared memory and background workers for test run. */
|
||||
extern void test_shm_mq_setup(uint64 queue_size, int32 nworkers,
|
||||
dsm_segment **seg, shm_mq_handle **output,
|
||||
shm_mq_handle **input);
|
||||
|
||||
/* Main entrypoint for a worker. */
|
||||
extern void test_shm_mq_main(Datum);
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user