Made server communication faster by using a shared memory block.
A few other optimizations in request processing in the server.
Moved automatically generated request definitions to server.h and
removed include/server/request.h.
diff --git a/server/object.h b/server/object.h
index c5d69fd..8da0c81 100644
--- a/server/object.h
+++ b/server/object.h
@@ -13,7 +13,6 @@
#include <sys/time.h>
#include "server.h"
-#include "server/request.h"
#define DEBUG_OBJECTS
@@ -29,6 +28,8 @@
/* operations valid on all objects */
struct object_ops
{
+ /* size of this object type */
+ size_t size;
/* dump the object (for debugging) */
void (*dump)(struct object *,int);
/* add a thread to the object wait queue */
@@ -65,49 +66,27 @@
};
extern void *mem_alloc( size_t size ); /* malloc wrapper */
-extern void *alloc_object( size_t size, const struct object_ops *ops, const char *name );
-extern struct object *create_named_object( const char *name, const struct object_ops *ops,
- size_t size );
-extern int init_object( struct object *obj, const struct object_ops *ops, const char *name );
+extern char *mem_strdup( const char *str );
+extern void *alloc_object( const struct object_ops *ops );
extern const char *get_object_name( struct object *obj );
+extern void *create_named_object( const struct object_ops *ops, const char *name, size_t len );
/* grab/release_object can take any pointer, but you better make sure */
/* that the thing pointed to starts with a struct object... */
extern struct object *grab_object( void *obj );
extern void release_object( void *obj );
-extern struct object *find_object( const char *name );
+extern struct object *find_object( const char *name, size_t len );
extern int no_add_queue( struct object *obj, struct wait_queue_entry *entry );
extern int no_satisfied( struct object *obj, struct thread *thread );
extern int no_read_fd( struct object *obj );
extern int no_write_fd( struct object *obj );
extern int no_flush( struct object *obj );
extern int no_get_file_info( struct object *obj, struct get_file_info_reply *info );
+extern void no_destroy( struct object *obj );
extern void default_select_event( int event, void *private );
#ifdef DEBUG_OBJECTS
extern void dump_objects(void);
#endif
-/* request handlers */
-
-struct iovec;
-struct thread;
-
-extern void fatal_protocol_error( const char *err, ... );
-extern void call_req_handler( struct thread *thread, enum request req,
- void *data, int len, int fd );
-extern void call_timeout_handler( void *thread );
-extern void call_kill_handler( struct thread *thread, int exit_code );
-
-extern void trace_request( enum request req, void *data, int len, int fd );
-extern void trace_timeout(void);
-extern void trace_kill( int exit_code );
-extern void trace_reply( struct thread *thread, int type, int pass_fd,
- struct iovec *vec, int veclen );
-/* check that the string is NULL-terminated and that the len is correct */
-#define CHECK_STRING(func,str,len) \
- do { if (((str)[(len)-1] || strlen(str) != (len)-1)) \
- fatal_protocol_error( "%s: invalid string '%.*s'\n", (func), (len), (str) ); \
- } while(0)
-
/* select functions */
#define READ_EVENT 1
@@ -143,8 +122,8 @@
extern struct client *add_client( int client_fd, struct thread *self );
extern void remove_client( struct client *client, int exit_code );
-extern int send_reply_v( struct client *client, int type, int pass_fd,
- struct iovec *vec, int veclen );
+extern void client_pass_fd( struct client *client, int pass_fd );
+extern void client_reply( struct client *client );
/* mutex functions */
@@ -156,6 +135,7 @@
unsigned int access );
extern int file_get_mmap_fd( struct file *file );
extern int grow_file( struct file *file, int size_high, int size_low );
+extern int create_anonymous_file(void);
extern struct file *create_temp_file( int access );
extern void file_set_error(void);