diff --git a/backends/server/ChangeLog b/backends/server/ChangeLog index 1b6a8a98..f8f76802 100644 --- a/backends/server/ChangeLog +++ b/backends/server/ChangeLog @@ -1,3 +1,22 @@ +2000-11-26 Martin Baulig + + * backend-server.h: New file. + (backend_server_private): New struct, formerly known + as glibtop_backend_private. + + * glibtop-backend-private.h: Removed. + + * backend-server.c: (_open_server): Use g_object_set_data() + to set add the backend_server_private data to the glibtop_backend, + don't override `backend->_priv'. + (_close_server): Use g_object_get_data() to get the data. + [FIXME: Use quarks directly.] + + * read.c: (glibtop_read_i): Replaced the glibtop_server and + glibtop_backend arguments with backend_server_private. + * read_data.c: (glibtop_read_data_i): Likewise. + * write.c: (glibtop_write_i): Likewise. + 2000-02-22 Martin Baulig * backend-sysdeps.c (LibGTopBackendInfo): Call this diff --git a/backends/server/Makefile.am b/backends/server/Makefile.am index 6d70bad1..5b72fa05 100644 --- a/backends/server/Makefile.am +++ b/backends/server/Makefile.am @@ -19,7 +19,7 @@ backend_DATA = \ libgtop-server.backend noinst_HEADERS = \ - glibtop-backend-private.h + backend-server.h backendlib_LTLIBRARIES = \ libgtop_backend_server.la diff --git a/backends/server/backend-server.c b/backends/server/backend-server.c index 5ba37410..ddf5b6bd 100644 --- a/backends/server/backend-server.c +++ b/backends/server/backend-server.c @@ -23,18 +23,13 @@ Boston, MA 02111-1307, USA. */ -#include -#include -#include - -#include -#include +#include static int -_open_server (glibtop *, glibtop_backend *, u_int64_t, const char **); +_open_server (glibtop_server *, glibtop_backend *, u_int64_t, const char **); static int -_close_server (glibtop *, glibtop_backend *); +_close_server (glibtop_server *, glibtop_backend *); extern glibtop_call_vector glibtop_backend_server_call_vector; @@ -51,57 +46,69 @@ glibtop_backend_info LibGTopBackendInfo_Server = { #endif static int -_open_server (glibtop *server, glibtop_backend *backend, +_open_server (glibtop_server *server, glibtop_backend *backend, u_int64_t features, const char **backend_args) { - backend->_priv = glibtop_calloc_r - (server, 1, sizeof (glibtop_backend_private)); + backend_server_private *priv; + + priv = glibtop_calloc_r (server, 1, sizeof (backend_server_private)); + + g_object_set_data (G_OBJECT (backend), BACKEND_DATA_KEY, priv); #ifdef DEBUG - fprintf (stderr, "open_server - %p, %p, %p\n", server, backend, - backend->_priv); + fprintf (stderr, "open_server - %p, %p, %p\n", server, backend, priv); - fprintf (stderr, "Opening pipe to server (%s).\n", - LIBGTOP_SERVER); + fprintf (stderr, "Opening pipe to server (%s).\n", LIBGTOP_SERVER); #endif - if (pipe (backend->_priv->input) || - pipe (backend->_priv->output)) { + if (pipe (priv->input) || pipe (priv->output)) { glibtop_warn_io_r (server, "cannot make a pipe"); return -1; } - backend->_priv->pid = fork (); + priv->pid = fork (); - if (backend->_priv->pid < 0) { + if (priv->pid < 0) { glibtop_warn_io_r (server, "fork failed"); return -1; - } else if (backend->_priv->pid == 0) { + } else if (priv->pid == 0) { close (0); close (1); - close (backend->_priv->input [0]); - close (backend->_priv->output [1]); - dup2 (backend->_priv->input [1], 1); - dup2 (backend->_priv->output [0], 0); + close (priv->input [0]); + close (priv->output [1]); + dup2 (priv->input [1], 1); + dup2 (priv->output [0], 0); execl (LIBGTOP_SERVER, "libgtop-server", NULL); glibtop_error_io_r (server, "execl (%s)", LIBGTOP_SERVER); _exit (2); } - close (backend->_priv->input [1]); - close (backend->_priv->output [0]); + close (priv->input [1]); + close (priv->output [0]); + + glibtop_server_ref (server); + priv->server = server; return 0; } static int -_close_server (glibtop *server, glibtop_backend *backend) +_close_server (glibtop_server *server, glibtop_backend *backend) { - kill (backend->_priv->pid, SIGKILL); - close (backend->_priv->input [0]); - close (backend->_priv->output [1]); + backend_server_private *priv; - backend->_priv->pid = 0; + priv = g_object_steal_data (G_OBJECT (backend), BACKEND_DATA_KEY); + g_assert (priv != NULL); + + kill (priv->pid, SIGKILL); + close (priv->input [0]); + close (priv->output [1]); + + glibtop_server_unref (priv->server); + + priv->pid = 0; + + g_free (priv); return 0; } diff --git a/backends/server/glibtop-backend-private.h b/backends/server/backend-server.h similarity index 62% rename from backends/server/glibtop-backend-private.h rename to backends/server/backend-server.h index ebd2be42..8b2d5f5c 100644 --- a/backends/server/glibtop-backend-private.h +++ b/backends/server/backend-server.h @@ -23,33 +23,46 @@ Boston, MA 02111-1307, USA. */ -#ifndef __GLIBTOP_BACKEND_PRIVATE_H__ -#define __GLIBTOP_BACKEND_PRIVATE_H__ +#ifndef __GLIBTOP_BACKEND_COMMON_H__ +#define __GLIBTOP_BACKEND_COMMON_H__ -struct _glibtop_backend_private +#include +#include + +#include +#include +#include +#include + +typedef struct _backend_server_private backend_server_private; + +#define BACKEND_DATA_KEY "backend-server-private" + +struct _backend_server_private { u_int64_t flags; int input [2]; /* Pipe client <- server */ int output [2]; /* Pipe client -> server */ pid_t pid; /* PID of the server */ + + glibtop_server *server; }; void * -glibtop_call_i (glibtop *server, glibtop_backend *backend, unsigned command, - size_t send_size, const void *send_ptr, +glibtop_call_i (glibtop_server *server, glibtop_backend *backend, + unsigned command, size_t send_size, const void *send_ptr, size_t data_size, const void *data_ptr, size_t recv_size, void *recv_ptr, int *retval_ptr); void -glibtop_read_i (glibtop *server, glibtop_backend *backend, - size_t size, void *buf); +glibtop_read_i (backend_server_private *priv, size_t size, void *buf); void * -glibtop_read_data_i (glibtop *server, glibtop_backend *backend); +glibtop_read_data_i (backend_server_private *priv); void -glibtop_write_i (glibtop *server, glibtop_backend *backend, - size_t size, const void *buf); +glibtop_write_i (backend_server_private *priv, size_t size, const void *buf); #endif + diff --git a/backends/server/command.c b/backends/server/command.c index 325dea67..2a416c09 100644 --- a/backends/server/command.c +++ b/backends/server/command.c @@ -23,34 +23,30 @@ Boston, MA 02111-1307, USA. */ -#include - -#include -#include -#include - -#include +#include #include "command.h" void * -glibtop_call_i (glibtop *server, glibtop_backend *backend, unsigned command, - size_t send_size, const void *send_buf, +glibtop_call_i (glibtop_server *server, glibtop_backend *backend, + unsigned command, size_t send_size, const void *send_buf, size_t data_size, const void *data_buf, size_t recv_size, void *recv_ptr, int *retval_ptr) { glibtop_command cmnd; glibtop_response resp; + backend_server_private *priv; #if 0 int retval; #endif - glibtop_init_r (&server, 0, 0); - memset (&cmnd, 0, sizeof (glibtop_command)); memset (&resp, 0, sizeof (glibtop_response)); + priv = g_object_get_data (G_OBJECT (backend), BACKEND_DATA_KEY); + g_assert (priv != NULL); + cmnd.command = command; /* If send_size is less than _GLIBTOP_PARAM_SIZE (normally 16 Bytes), we @@ -66,16 +62,16 @@ glibtop_call_i (glibtop *server, glibtop_backend *backend, unsigned command, cmnd.data_size = data_size; - glibtop_write_i (server, backend, sizeof (glibtop_command), &cmnd); + glibtop_write_i (priv, sizeof (glibtop_command), &cmnd); if (data_size) { #ifdef SLAVE_DEBUG fprintf (stderr, "SENDING %d bytes of DATA.\n", data_size); #endif - glibtop_write_i (server, backend, data_size, data_buf); + glibtop_write_i (priv, data_size, data_buf); } - glibtop_read_i (server, backend, sizeof (glibtop_response), &resp); + glibtop_read_i (priv, sizeof (glibtop_response), &resp); #ifdef SLAVE_DEBUG fprintf (stderr, "RESPONSE: %d - %d - %ld - %ld - %p - %ld\n", @@ -94,12 +90,12 @@ glibtop_call_i (glibtop *server, glibtop_backend *backend, unsigned command, } if (recv_ptr) - glibtop_read_i (server, backend, recv_size, recv_ptr); + glibtop_read_i (priv, recv_size, recv_ptr); if (resp.data_size) { void *ptr = glibtop_malloc_r (server, resp.data_size); - glibtop_read_i (server, backend, resp.data_size, ptr); + glibtop_read_i (priv, resp.data_size, ptr); return ptr; } diff --git a/backends/server/marshal.pl b/backends/server/marshal.pl index c1ebc905..3fc29d40 100644 --- a/backends/server/marshal.pl +++ b/backends/server/marshal.pl @@ -24,19 +24,14 @@ print '/* marshal.c */'; print "/* This is a generated file. Please modify `marshal.pl' */"; print ''; -print '#include '; -print '#include '; -print '#include '; +print '#include '; print ''; print '#include '; print '#include '; print ''; print '#include "command.h"'; -print '#include '; print '#include '; print ''; -print '#include '; -print ''; $feature_count = 0; diff --git a/backends/server/read.c b/backends/server/read.c index 7e8e17ec..2443f8ee 100644 --- a/backends/server/read.c +++ b/backends/server/read.c @@ -23,31 +23,24 @@ Boston, MA 02111-1307, USA. */ -#include -#include -#include - -#include +#include void -glibtop_read_i (glibtop *server, glibtop_backend *backend, - size_t size, void *buf) +glibtop_read_i (backend_server_private *priv, size_t size, void *buf) { int ret = 0; - glibtop_init_r (&server, 0, 0); - #ifdef DEBUG fprintf (stderr, "LIBRARY: really reading %d bytes from %d.\n", - size, backend->_priv->input [0]); + size, priv->input [0]); #endif - ret = read (backend->_priv->input [0], buf, size); + ret = read (priv->input [0], buf, size); #ifdef DEBUG fprintf (stderr, "LIBRARY: read %d bytes.\n", ret); #endif if (ret < 0) - glibtop_error_io_r (server, "read %d bytes", size); + glibtop_error_io_r (priv->server, "read %d bytes", size); } diff --git a/backends/server/read_data.c b/backends/server/read_data.c index df134fec..1922e1af 100644 --- a/backends/server/read_data.c +++ b/backends/server/read_data.c @@ -23,15 +23,10 @@ Boston, MA 02111-1307, USA. */ -#include -#include -#include -#include - -#include +#include void * -glibtop_read_data_i (glibtop *server, glibtop_backend *backend) +glibtop_read_data_i (backend_server_private *priv) { size_t size; void *ptr; @@ -41,11 +36,10 @@ glibtop_read_data_i (glibtop *server, glibtop_backend *backend) fprintf (stderr, "LIBRARY: reading %d data bytes.\n", sizeof (size_t)); #endif - ret = read (backend->_priv->input [0], (void *)&size, - sizeof (size_t)); + ret = read (priv->input [0], (void *)&size, sizeof (size_t)); if (ret < 0) - glibtop_error_io_r (server, "read data size"); + glibtop_error_io_r (priv->server, "read data size"); #ifdef DEBUG fprintf (stderr, "LIBRARY: really reading %d data bytes (ret = %d).\n", size, ret); @@ -53,12 +47,12 @@ glibtop_read_data_i (glibtop *server, glibtop_backend *backend) if (!size) return NULL; - ptr = glibtop_malloc_r (server, size); + ptr = glibtop_malloc_r (priv->server, size); - ret = read (backend->_priv->input [0], ptr, size); + ret = read (priv->input [0], ptr, size); if (ret < 0) - glibtop_error_io_r (server, "read data %d bytes"); + glibtop_error_io_r (priv->server, "read data %d bytes"); return ptr; } diff --git a/backends/server/write.c b/backends/server/write.c index 723dc0d7..c3577548 100644 --- a/backends/server/write.c +++ b/backends/server/write.c @@ -23,15 +23,10 @@ Boston, MA 02111-1307, USA. */ -#include -#include -#include - -#include +#include void -glibtop_write_i (glibtop *server, glibtop_backend *backend, - size_t size, const void *buf) +glibtop_write_i (backend_server_private *priv, size_t size, const void *buf) { int ret; @@ -41,8 +36,8 @@ glibtop_write_i (glibtop *server, glibtop_backend *backend, fprintf (stderr, "LIBRARY: really writing %d bytes.\n", size); #endif - ret = write (backend->_priv->output [1], buf, size); + ret = write (priv->output [1], buf, size); if (ret < 0) - glibtop_error_io_r (server, "write %d bytes", size); + glibtop_error_io_r (priv->server, "write %d bytes", size); }