diff options
author | Günther Deschner <gdeschner@redhat.com> | 2012-05-30 17:38:15 +0200 |
---|---|---|
committer | Simo Sorce <simo@redhat.com> | 2012-06-25 17:00:38 -0400 |
commit | 594f96fb6c612fb60da72f84615b1406f2be01e9 (patch) | |
tree | 1746f4bed38aba4d2949cfabf7eed69e505fe07b | |
parent | 76b3321a40a9a451d36e2bd14a8a5c804a0db551 (diff) | |
download | gss-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.c | 45 |
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 */ |