diff --git a/ChangeLog b/ChangeLog index 3e0a3f16..21d343a4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2000-11-27 Martin Baulig + + * include/glibtop/glibtop-backend-info.h + (glibtop_backend_close_func_t): Added `void *closure' argument. + + * include/glibtop/call-vector.h: Changed the second argument + of all function in the call vector from `glibtop_backend *' to + `void *closure'. + 2000-11-26 Martin Baulig * include/glibtop/glibtop-backend.h (glibtop_backend_open): diff --git a/backends/common/backend-common.c b/backends/common/backend-common.c index 3cea9d28..840f3ee1 100644 --- a/backends/common/backend-common.c +++ b/backends/common/backend-common.c @@ -29,7 +29,7 @@ static int _open_common (glibtop_server *, glibtop_backend *, u_int64_t, const char **); static int -_close_common (glibtop_server *, glibtop_backend *); +_close_common (glibtop_server *, glibtop_backend *, void *closure); extern glibtop_call_vector glibtop_backend_common_call_vector; @@ -53,8 +53,9 @@ _open_common (glibtop_server *server, glibtop_backend *backend, } static int -_close_common (glibtop_server *server, glibtop_backend *backend) +_close_common (glibtop_server *server, glibtop_backend *backend, + void *closure) { - return -1; + return 0; } diff --git a/backends/common/marshal.pl b/backends/common/marshal.pl index 545a6a09..54349023 100644 --- a/backends/common/marshal.pl +++ b/backends/common/marshal.pl @@ -137,16 +137,16 @@ sub output { $func_decl = 'static '.$retval."\n"; if ($line_fields[3] eq '') { - $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend%s)\n", + $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure%s)\n", $feature, $param_decl); } elsif ($line_fields[3] eq 'array') { - $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend, glibtop_array *array%s)\n", + $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array%s)\n", $feature, $param_decl); } elsif ($line_fields[3] =~ /^array/) { - $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend, glibtop_array *array, %s *buf%s)\n", + $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array, %s *buf%s)\n", $feature, 'glibtop_'.$feature, $param_decl); } else { - $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend, %s *buf%s)\n", + $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, %s *buf%s)\n", $feature, 'glibtop_'.$feature, $param_decl); } diff --git a/backends/server/backend-server.c b/backends/server/backend-server.c index 625820d1..743e62e4 100644 --- a/backends/server/backend-server.c +++ b/backends/server/backend-server.c @@ -29,10 +29,7 @@ static int _open_server (glibtop_server *, glibtop_backend *, u_int64_t, const char **); static int -_close_server (glibtop_server *, glibtop_backend *); - -static int backend_server_initialized = 0; -GQuark backend_server_quark; +_close_server (glibtop_server *, glibtop_backend *, void *); extern glibtop_call_vector glibtop_backend_server_call_vector; @@ -54,15 +51,9 @@ _open_server (glibtop_server *server, glibtop_backend *backend, { backend_server_private *priv; - if (!backend_server_initialized) { - backend_server_quark = g_quark_from_string ("backend-server-private"); - - backend_server_initialized = 1; - } - priv = glibtop_calloc_r (server, 1, sizeof (backend_server_private)); - g_object_set_qdata (G_OBJECT (backend), backend_server_quark, priv); + glibtop_backend_set_closure_data (backend, priv); #ifdef DEBUG fprintf (stderr, "open_server - %p, %p, %p\n", server, backend, priv); @@ -102,12 +93,10 @@ _open_server (glibtop_server *server, glibtop_backend *backend, } static int -_close_server (glibtop_server *server, glibtop_backend *backend) +_close_server (glibtop_server *server, glibtop_backend *backend, + void *closure) { - backend_server_private *priv; - - priv = g_object_steal_qdata (G_OBJECT (backend), backend_server_quark); - g_assert (priv != NULL); + backend_server_private *priv = closure; kill (priv->pid, SIGKILL); close (priv->input [0]); diff --git a/backends/server/backend-server.h b/backends/server/backend-server.h index c0fd0024..636519d1 100644 --- a/backends/server/backend-server.h +++ b/backends/server/backend-server.h @@ -46,10 +46,8 @@ struct _backend_server_private glibtop_server *server; }; -extern GQuark backend_server_quark; - void * -glibtop_call_i (glibtop_server *server, glibtop_backend *backend, +glibtop_call_i (glibtop_server *server, backend_server_private *priv, 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, diff --git a/backends/server/command.c b/backends/server/command.c index ee6053d9..1821b938 100644 --- a/backends/server/command.c +++ b/backends/server/command.c @@ -28,7 +28,7 @@ #include "command.h" void * -glibtop_call_i (glibtop_server *server, glibtop_backend *backend, +glibtop_call_i (glibtop_server *server, backend_server_private *priv, 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, @@ -36,7 +36,6 @@ glibtop_call_i (glibtop_server *server, glibtop_backend *backend, { glibtop_command cmnd; glibtop_response resp; - backend_server_private *priv; #if 0 int retval; #endif @@ -44,9 +43,6 @@ glibtop_call_i (glibtop_server *server, glibtop_backend *backend, memset (&cmnd, 0, sizeof (glibtop_command)); memset (&resp, 0, sizeof (glibtop_response)); - priv = g_object_get_qdata (G_OBJECT (backend), backend_server_quark); - g_assert (priv != NULL); - cmnd.command = command; /* If send_size is less than _GLIBTOP_PARAM_SIZE (normally 16 Bytes), we diff --git a/backends/server/marshal.pl b/backends/server/marshal.pl index 3fc29d40..d00dc5e9 100644 --- a/backends/server/marshal.pl +++ b/backends/server/marshal.pl @@ -198,7 +198,7 @@ sub output { $send_buf_code .= "\t_LIBGTOP_DATA_ptr = _LIBGTOP_DATA_buf;\n"; $call_code = ''; - $call_code .= sprintf ("\t%sglibtop_call_i (server, backend, GLIBTOP_CMND_%s,\n", + $call_code .= sprintf ("\t%sglibtop_call_i (server, closure, GLIBTOP_CMND_%s,\n", $call_prefix, &toupper($feature)); $call_code .= sprintf ("\t\t\t%s%s, %s,\n", $call_prefix_space, "_LIBGTOP_SEND_len", "_LIBGTOP_SEND_buf"); @@ -257,16 +257,16 @@ sub output { $func_decl = 'static '.$retval."\n"; if ($line_fields[3] eq '') { - $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend%s)\n", + $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure%s)\n", $feature, $param_decl); } elsif ($line_fields[3] eq 'array') { - $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend, glibtop_array *array%s)\n", + $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array%s)\n", $feature, $param_decl); } elsif ($line_fields[3] =~ /^array/) { - $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend, glibtop_array *array, %s *buf%s)\n", + $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array, %s *buf%s)\n", $feature, 'glibtop_'.$feature, $param_decl); } else { - $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend, %s *buf%s)\n", + $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, %s *buf%s)\n", $feature, 'glibtop_'.$feature, $param_decl); } diff --git a/backends/sysdeps/backend-sysdeps.c b/backends/sysdeps/backend-sysdeps.c index 70d273c5..e7e98c71 100644 --- a/backends/sysdeps/backend-sysdeps.c +++ b/backends/sysdeps/backend-sysdeps.c @@ -29,7 +29,7 @@ static int _open_sysdeps (glibtop_server *, glibtop_backend *, u_int64_t, const char **); static int -_close_sysdeps (glibtop_server *, glibtop_backend *); +_close_sysdeps (glibtop_server *, glibtop_backend *, void *); extern glibtop_call_vector glibtop_backend_sysdeps_call_vector; @@ -68,8 +68,9 @@ _open_sysdeps (glibtop_server *server, glibtop_backend *backend, } static int -_close_sysdeps (glibtop_server *server, glibtop_backend *backend) +_close_sysdeps (glibtop_server *server, glibtop_backend *backend, + void *closure) { - return -1; + return 0; } diff --git a/backends/sysdeps/marshal.pl b/backends/sysdeps/marshal.pl index 132581b9..4ccf94f5 100644 --- a/backends/sysdeps/marshal.pl +++ b/backends/sysdeps/marshal.pl @@ -137,16 +137,16 @@ sub output { $func_decl = 'static '.$retval."\n"; if ($line_fields[3] eq '') { - $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend%s)\n", + $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure%s)\n", $feature, $param_decl); } elsif ($line_fields[3] eq 'array') { - $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend, glibtop_array *array%s)\n", + $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array%s)\n", $feature, $param_decl); } elsif ($line_fields[3] =~ /^array/) { - $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend, glibtop_array *array, %s *buf%s)\n", + $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, glibtop_array *array, %s *buf%s)\n", $feature, 'glibtop_'.$feature, $param_decl); } else { - $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, glibtop_backend *backend, %s *buf%s)\n", + $func_decl .= sprintf ("_glibtop_get_%s_c (glibtop_server *server, void *closure, %s *buf%s)\n", $feature, 'glibtop_'.$feature, $param_decl); } diff --git a/include/glibtop/call-vector.h.in b/include/glibtop/call-vector.h.in index b1ab81dd..8c02d478 100644 --- a/include/glibtop/call-vector.h.in +++ b/include/glibtop/call-vector.h.in @@ -31,8 +31,6 @@ #include #include -#include - BEGIN_LIBGTOP_DECLS struct _glibtop_call_vector diff --git a/include/glibtop/call-vector.pl b/include/glibtop/call-vector.pl index 53b16077..ad6a6514 100644 --- a/include/glibtop/call-vector.pl +++ b/include/glibtop/call-vector.pl @@ -82,16 +82,16 @@ sub parse_features_def { if ($line_fields[3] eq '') { $func_decl_code .= sprintf - (qq[\t%s (*%s) (glibtop_server *, glibtop_backend *%s);\n], $retval, $feature, $param_decl); + (qq[\t%s (*%s) (glibtop_server *, void *%s);\n], $retval, $feature, $param_decl); } elsif ($line_fields[3] eq 'array') { $func_decl_code .= sprintf - (qq[\t%s (*%s) (glibtop_server *, glibtop_backend *, glibtop_array *%s);\n], $retval, $feature, $param_decl); + (qq[\t%s (*%s) (glibtop_server *, void *, glibtop_array *%s);\n], $retval, $feature, $param_decl); } elsif ($line_fields[3] =~ /^array/) { $func_decl_code .= sprintf - (qq[\t%s (*%s) (glibtop_server *, glibtop_backend *, glibtop_array *, %s *%s);\n], $retval, $feature, 'glibtop_'.$feature, $param_decl); + (qq[\t%s (*%s) (glibtop_server *, void *, glibtop_array *, %s *%s);\n], $retval, $feature, 'glibtop_'.$feature, $param_decl); } else { $func_decl_code .= sprintf - (qq[\t%s (*%s) (glibtop_server *, glibtop_backend *, %s *%s);\n], $retval, $feature, 'glibtop_'.$feature, $param_decl); + (qq[\t%s (*%s) (glibtop_server *, void *, %s *%s);\n], $retval, $feature, 'glibtop_'.$feature, $param_decl); } } diff --git a/include/glibtop/glibtop-backend-info.h b/include/glibtop/glibtop-backend-info.h index 3c25fb1c..8387d1a9 100644 --- a/include/glibtop/glibtop-backend-info.h +++ b/include/glibtop/glibtop-backend-info.h @@ -39,9 +39,10 @@ typedef struct _glibtop_backend_module glibtop_backend_module; typedef struct _glibtop_call_vector glibtop_call_vector; -typedef int (*glibtop_backend_open_func_t) (glibtop_server *, glibtop_backend *, - u_int64_t, const char **); -typedef int (*glibtop_backend_close_func_t) (glibtop_server *, glibtop_backend *); +typedef int (*glibtop_backend_open_func_t) (glibtop_server *, glibtop_backend *, + u_int64_t, const char **); +typedef int (*glibtop_backend_close_func_t) (glibtop_server *, glibtop_backend *, + void *); struct _glibtop_backend_info { diff --git a/include/glibtop/glibtop-backend.h b/include/glibtop/glibtop-backend.h index 816df427..24f4e837 100644 --- a/include/glibtop/glibtop-backend.h +++ b/include/glibtop/glibtop-backend.h @@ -68,6 +68,12 @@ glibtop_backend * glibtop_backend_get (const char *backend_name, u_int64_t features, const char **backend_args, GError **error); +void +glibtop_backend_set_closure_data (glibtop_backend *backend, void *closure); + +void * +glibtop_backend_get_closure_data (glibtop_backend *backend); + glibtop_call_vector * glibtop_backend_get_call_vector (glibtop_backend *backend); diff --git a/lib/glibtop-backend.c b/lib/glibtop-backend.c index 6627783f..6cacfd27 100644 --- a/lib/glibtop-backend.c +++ b/lib/glibtop-backend.c @@ -44,6 +44,8 @@ struct _glibtop_backend_private { const glibtop_backend_info *info; + void *closure_data; + glibtop_server *server; glibtop_backend_module *module; }; @@ -260,3 +262,19 @@ glibtop_backend_get_server (glibtop_backend *backend) return backend->_priv->server; } +void * +glibtop_backend_get_closure_data (glibtop_backend *backend) +{ + g_return_val_if_fail (GLIBTOP_IS_BACKEND (backend), NULL); + + return backend->_priv->closure_data; +} + +void +glibtop_backend_set_closure_data (glibtop_backend *backend, void *closure) +{ + g_return_if_fail (GLIBTOP_IS_BACKEND (backend)); + g_return_if_fail (backend->_priv->closure_data == NULL); + + backend->_priv->closure_data = closure; +} diff --git a/lib/lib.pl b/lib/lib.pl index 1e725fa7..a59092f3 100755 --- a/lib/lib.pl +++ b/lib/lib.pl @@ -179,23 +179,23 @@ sub output { ("\t}\n\n"); $sysdeps_code .= sprintf - ("\tfor (list = client->_priv->backend_list; list; list = list->next) {\n\t\tglibtop_backend *backend = list->data;\n\t\tglibtop_call_vector *call_vector;\n\n\t\tcall_vector = glibtop_backend_get_call_vector (backend);\n\n\t\tif (call_vector && call_vector->%s) {\n\t\t\tglibtop_server *server = glibtop_backend_get_server (backend);\n\n", $feature); + ("\tfor (list = client->_priv->backend_list; list; list = list->next) {\n\t\tglibtop_backend *backend = list->data;\n\t\tglibtop_call_vector *call_vector;\n\n\t\tcall_vector = glibtop_backend_get_call_vector (backend);\n\n\t\tif (call_vector && call_vector->%s) {\n\t\t\tglibtop_server *server = glibtop_backend_get_server (backend);\n\t\t\tvoid *closure = glibtop_backend_get_closure_data (backend);\n\n", $feature); if ($line_fields[3] eq '') { $sysdeps_code .= sprintf - ("\t\t\tretval = call_vector->%s (server, backend%s);\n", + ("\t\t\tretval = call_vector->%s (server, closure%s);\n", $feature, $call_param); } elsif ($line_fields[3] eq 'array') { $sysdeps_code .= sprintf - ("\t\t\tretval = call_vector->%s (server, backend, array%s);\n", + ("\t\t\tretval = call_vector->%s (server, closure, array%s);\n", $feature, $call_param); } elsif ($line_fields[3] =~ /^array/) { $sysdeps_code .= sprintf - ("\t\t\tretval = call_vector->%s (server, backend, array, buf%s);\n", + ("\t\t\tretval = call_vector->%s (server, closure, array, buf%s);\n", $feature, $call_param); } else { $sysdeps_code .= sprintf - ("\t\t\tretval = call_vector->%s (server, backend, buf%s);\n", + ("\t\t\tretval = call_vector->%s (server, closure, buf%s);\n", $feature, $call_param); }