summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGünther Deschner <gdeschner@redhat.com>2012-05-30 17:38:15 +0200
committerSimo Sorce <simo@redhat.com>2012-06-25 17:00:38 -0400
commit594f96fb6c612fb60da72f84615b1406f2be01e9 (patch)
tree1746f4bed38aba4d2949cfabf7eed69e505fe07b
parent76b3321a40a9a451d36e2bd14a8a5c804a0db551 (diff)
downloadgss-proxy-594f96fb6c612fb60da72f84615b1406f2be01e9.tar.gz
gss-proxy-594f96fb6c612fb60da72f84615b1406f2be01e9.tar.xz
gss-proxy-594f96fb6c612fb60da72f84615b1406f2be01e9.zip
Allow to set per service ring buffer, with configurable size.
Guenther Signed-off-by: Simo Sorce <simo@redhat.com>
-rw-r--r--proxy/src/gp_config.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/proxy/src/gp_config.c b/proxy/src/gp_config.c
index 7e9de68..0e81de6 100644
--- a/proxy/src/gp_config.c
+++ b/proxy/src/gp_config.c
@@ -126,6 +126,42 @@ static int get_krb5_mech_cfg(struct gp_service *svc,
return 0;
}
+static int setup_service_ring_buffer(struct gp_config *cfg,
+ struct gp_service *svc,
+ int buffer_size)
+{
+ uint32_t ret_maj, ret_min;
+ struct gp_ring_buffer **newrb;
+ uint32_t num;
+
+ if (buffer_size == -1) {
+ /* a reasonable default ? */
+ buffer_size = GP_RING_BUFFER_SIZE;
+ }
+
+ num = cfg->num_ring_buffers;
+ newrb = realloc(cfg->ring_buffers,
+ sizeof(struct gp_ring_buffer *) * (num + 1));
+ if (!newrb) {
+ return ENOMEM;
+ }
+ cfg->ring_buffers = newrb;
+
+ ret_maj = gp_init_ring_buffer(&ret_min,
+ svc->name,
+ buffer_size,
+ &cfg->ring_buffers[num]);
+ if (ret_maj) {
+ return ret_min;
+ }
+
+ cfg->num_ring_buffers++;
+
+ svc->ring_buffer = cfg->ring_buffers[num];
+
+ return 0;
+}
+
static int load_services(struct gp_config *cfg, dictionary *dict)
{
int num_sec;
@@ -191,6 +227,15 @@ static int load_services(struct gp_config *cfg, dictionary *dict)
cfg->svcs[n]->ring_buffer = cfg->ring_buffers[1];
}
+ value = get_char_value(dict, secname, "dedicated_ring_buffer");
+ if (value && option_is_set(value)) {
+ valnum = get_int_value(dict, secname, "ring_buffer_size");
+ ret = setup_service_ring_buffer(cfg, cfg->svcs[n], valnum);
+ if (ret) {
+ goto done;
+ }
+ }
+
value = get_char_value(dict, secname, "mechs");
if (value == NULL) {
/* malformed section, mech is missing */