
This commit beefs up the Makefile to do the build, instead of the Rakefile. It also removes from the Rakefile the dependency on rake_utils, which should mean it's ok to build in a schroot. The files are reorganised to make the Makefile rules more tractable, although the reorganisation reveals a problem with our current code organisation. The problem is that the proxy-specific code transitively depends on the server code via flexnbd.h, which has a circular dependency on the server and client structs. This should be broken in a future commit by separating the flexnbd struct into a shared config struct and server-specific parts, so that the server code can be moved into src/server to more accurately show the functional dependencies.
56 lines
1.4 KiB
C
56 lines
1.4 KiB
C
#ifndef MBOX_H
|
|
#define MBOX_H
|
|
|
|
/** mbox
|
|
* A thread sync object. Put a void * into the mbox in one thread, and
|
|
* get it out in another. The receiving thread will block if there's
|
|
* nothing in the mbox, and the sending thread will block if there is.
|
|
* The mbox doesn't assume any responsibility for the pointer it's
|
|
* passed - you must free it yourself if it's malloced.
|
|
*/
|
|
|
|
|
|
#include <pthread.h>
|
|
|
|
|
|
struct mbox {
|
|
void * contents;
|
|
|
|
/** Marker to tell us if there's content in the box.
|
|
* Keeping this separate allows us to use NULL for the contents.
|
|
*/
|
|
int full;
|
|
|
|
/** This gets signaled by mbox_post, and waited on by
|
|
* mbox_receive */
|
|
pthread_cond_t filled_cond;
|
|
/** This is signaled by mbox_receive, and waited on by mbox_post */
|
|
pthread_cond_t emptied_cond;
|
|
pthread_mutex_t mutex;
|
|
};
|
|
|
|
|
|
/* Create an mbox. */
|
|
struct mbox * mbox_create(void);
|
|
|
|
/* Put something in the mbox, blocking if it's already full.
|
|
* That something can be NULL if you want.
|
|
*/
|
|
void mbox_post( struct mbox *, void *);
|
|
|
|
/* See what's in the mbox. This isn't thread-safe. */
|
|
void * mbox_contents( struct mbox *);
|
|
|
|
/* See if anything has been put into the mbox. This isn't thread-safe.
|
|
* */
|
|
int mbox_is_full( struct mbox *);
|
|
|
|
/* Get the contents from the mbox, blocking if there's nothing there. */
|
|
void * mbox_receive( struct mbox *);
|
|
|
|
/* Free the mbox and destroy the associated pthread bits. */
|
|
void mbox_destroy( struct mbox *);
|
|
|
|
|
|
#endif
|