local memory contexts to avoid a discard_const_p()
Matthias Dieter Wallnöfer
mdw at samba.org
Wed Dec 15 10:12:08 MST 2010
Jelmer,
I've uploaded a proposal: in my private repo on git.samba.org the branch
"oid_const".
Cheers,
Matthias
Jelmer Vernooij wrote:
> On Mon, 2010-12-13 at 10:55 +0000, Matthias Dieter Wallnöfer wrote:
>
>
>> but is there some particular reason that "oid" from
>> "dsdb_schema_pfm_oid_from_attid" is returned "const" - as far as I've
>> seen it's an allocated thing? If it's not then we would not need
>> "discard_const_p" at all.
>>
> No, that indeed doesn't seem necessary. At first glance, changing that
> function to return a non-const seems like a more reasonable approach. It
> seems like it would also require changing some of the ber_read_*
> functions though.
>
> Cheers,
>
> Jelmer
>
>> On Sun, 2010-12-12 at 21:11 +0100, Jelmer Vernooij wrote:
>>
>>> Hi Matthias,
>>>
>>> As discussed earlier, can you please send this kind of patch to the
>>>
>> list
>>
>>> for review first?
>>>
>>> I have my doubts about the usefulness of these changes in general
>>> compared to the benefit. Eliminating talloc contexts doesn't really
>>>
>> gain
>>
>>> us much. The overhead of creating an extra talloc context compared
>>>
>> to
>>
>>> the overhead of using Python in the first place is negligible.
>>>
>>
>>>> @@ -248,27 +253,19 @@ static PyObject
>>>>
>> *py_dsdb_get_oid_from_attid(PyObject *self, PyObject *args)
>>
>>>>
>>>> PyErr_LDB_OR_RAISE(py_ldb, ldb);
>>>>
>>>> - mem_ctx = talloc_new(NULL);
>>>> - if (mem_ctx == NULL) {
>>>> - PyErr_NoMemory();
>>>> - return NULL;
>>>> - }
>>>> -
>>>> schema = dsdb_get_schema(ldb, NULL);
>>>>
>>>> if (!schema) {
>>>> PyErr_SetString(PyExc_RuntimeError, "Failed to find a
>>>>
>> schema from ldb \n");
>>
>>>> - talloc_free(mem_ctx);
>>>> return NULL;
>>>> }
>>>>
>>>> status = dsdb_schema_pfm_oid_from_attid(schema->prefixmap,
>>>>
>> attid,
>>
>>>> - mem_ctx,&oid);
>>>> + NULL,&oid);
>>>> PyErr_WERROR_IS_ERR_RAISE(status);
>>>>
>>>> ret = PyString_FromString(oid);
>>>> -
>>>> - talloc_free(mem_ctx);
>>>> + talloc_free(discard_const_p(char, oid));
>>>>
>>> ^^ Is this really necessary? I'd rather have the extra memory
>>>
>> context
>>
>>> than add an extra discard_const_p.
>>>
>> I agree, it's really useful to be able to avoid the const issues by
>> using a new memory context here. Every discard_const_p() hides a
>> potentially serious bug, and so should be avoided where other
>> reasonable
>> alternatives exist). The local memory context seems a very reasonable
>> alternative, and so it seems a backwards step to eliminate it.
>>
>> Andrew Bartlett
>>
>> --
>> Andrew Bartlett
>> http://samba.org/~abartlet/
>> Authentication Developer, Samba Team http://samba.org
>> Samba Developer, Cisco Inc.
>>
>>
>>
>
More information about the samba-technical
mailing list