[libvirt] question about virConnectGetAllDomainStats and virTypedParameter

Vasiliy Tolstov v.tolstov at selfip.ru
Wed Jun 10 06:52:29 UTC 2015


I'm try to implement virConnectGetAllDomainStats for php binding api,
but have one issue with VIR_TYPED_PARAM_STRING:

code part:
        retval = virConnectGetAllDomainStats(conn->conn, stats,
&retstats, flags);
        for (i=0; i < retval; i++) {
                zval *arr2;
                ALLOC_INIT_ZVAL(arr2);
                array_init(arr2);
                for (j = 0; j < retstats[i]->nparams; j++) {
                        params = retstats[i]->params[j];
                        switch (params.type) {
                        case VIR_TYPED_PARAM_INT:
                                add_assoc_long(arr2, params.field,
params.value.i);
                        case VIR_TYPED_PARAM_UINT:
                                add_assoc_long(arr2, params.field,
params.value.ui);
                        case VIR_TYPED_PARAM_LLONG:
                                add_assoc_long(arr2, params.field,
params.value.l);
                        case VIR_TYPED_PARAM_ULLONG:
                                add_assoc_long(arr2, params.field,
params.value.ul);
                        case VIR_TYPED_PARAM_DOUBLE:
                                add_assoc_double(arr2, params.field,
params.value.d);
                        case VIR_TYPED_PARAM_BOOLEAN:
                                add_assoc_bool(arr2, params.field,
params.value.b);
                        case VIR_TYPED_PARAM_STRING:
                                add_assoc_string_ex(arr2,
params.field, strlen(params.field)+1, strdup(params.value.s),
strlen(params.value.s)+1); // SEGFAULT HAPPENING
                        }
                }

gdb shows:
    return_value_used=<optimized out>) at libvirt-php.c:2505
        arr2 = 0x7ffff7fd72b8
        conn = <optimized out>
        zconn = 0x7ffff7fd7140
        retval = <optimized out>
        flags = <optimized out>
        stats = <optimized out>
        name = <optimized out>
        i = <optimized out>
        j = <optimized out>
        params = {field = "state.state", '\000' <repeats 68 times>,
type = 1, value = {i = 5, ui = 5, l = 5, ul = 5, d =
2.4703282292062327e-323, b = 5 '\005',
            s = 0x5 <Address 0x5 out of bounds>}}
        retstats = 0x101d870

What i'm doing wrong?

-- 
Vasiliy Tolstov,
e-mail: v.tolstov at selfip.ru




More information about the libvir-list mailing list