From 5792fa90ace06f736661d9924ec9a75c3a0a9771 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 29 Dec 2010 18:56:13 +0100 Subject: [PATCH] s4-python: Only set BASETYPE flag if subclassing is supported. Autobuild-User: Jelmer Vernooij Autobuild-Date: Sat Jan 1 03:39:58 CET 2011 on sn-devel-104 --- lib/talloc/pytalloc.c | 4 +--- lib/tdb/pytdb.c | 2 +- libcli/nbt/pynbt.c | 8 ++++---- source4/lib/ldb-samba/pyldb.c | 15 ++++++--------- source4/lib/ldb/pyldb.c | 8 ++++---- source4/lib/messaging/pymessaging.c | 4 ++-- source4/librpc/rpc/pyrpc.c | 3 +-- source4/web_server/wsgi.c | 6 +++--- 8 files changed, 22 insertions(+), 28 deletions(-) diff --git a/lib/talloc/pytalloc.c b/lib/talloc/pytalloc.c index a8c46c96f8c..614b81f0571 100644 --- a/lib/talloc/pytalloc.c +++ b/lib/talloc/pytalloc.c @@ -96,7 +96,7 @@ static void py_talloc_dealloc(PyObject* self) py_talloc_Object *obj = (py_talloc_Object *)self; assert(talloc_unlink(NULL, obj->talloc_ctx) != -1); obj->talloc_ctx = NULL; - PyObject_Del(self); + self->ob_type->tp_free(self); } /** @@ -112,8 +112,6 @@ static int py_talloc_default_cmp(PyObject *_obj1, PyObject *_obj2) return ((char *)py_talloc_get_ptr(obj1) - (char *)py_talloc_get_ptr(obj2)); } - - static PyTypeObject TallocObject_Type = { .tp_name = "talloc.Object", .tp_doc = "Python wrapper for a talloc-maintained object.", diff --git a/lib/tdb/pytdb.c b/lib/tdb/pytdb.c index 981459efef7..0faba562de9 100644 --- a/lib/tdb/pytdb.c +++ b/lib/tdb/pytdb.c @@ -479,7 +479,7 @@ static void tdb_object_dealloc(PyTdbObject *self) { if (!self->closed) tdb_close(self->ctx); - PyObject_Del(self); + self->ob_type->tp_free(self); } static PyObject *obj_getitem(PyTdbObject *self, PyObject *key) diff --git a/libcli/nbt/pynbt.c b/libcli/nbt/pynbt.c index 9251ecfc428..0bba2ec7a76 100644 --- a/libcli/nbt/pynbt.c +++ b/libcli/nbt/pynbt.c @@ -38,10 +38,10 @@ typedef struct { struct nbt_name_socket *socket; } nbt_node_Object; -static void py_nbt_node_dealloc(PyObject *obj) +static void py_nbt_node_dealloc(nbt_node_Object *self) { - talloc_free(((nbt_node_Object *)obj)->mem_ctx); - PyObject_Del(obj); + talloc_free(self->mem_ctx); + self->ob_type->tp_free(self); } static PyObject *py_nbt_node_init(PyTypeObject *self, PyObject *args, PyObject *kwargs) @@ -395,7 +395,7 @@ PyTypeObject nbt_node_Type = { .tp_basicsize = sizeof(nbt_node_Object), .tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, .tp_new = py_nbt_node_init, - .tp_dealloc = py_nbt_node_dealloc, + .tp_dealloc = (destructor)py_nbt_node_dealloc, .tp_methods = py_nbt_methods, .tp_doc = "Node()\n" "Create a new NetBIOS node\n" diff --git a/source4/lib/ldb-samba/pyldb.c b/source4/lib/ldb-samba/pyldb.c index cce653e20ac..472a4664ea1 100644 --- a/source4/lib/ldb-samba/pyldb.c +++ b/source4/lib/ldb-samba/pyldb.c @@ -45,8 +45,6 @@ static void PyErr_SetLdbError(PyObject *error, int ret, struct ldb_context *ldb_ ldb_ctx == NULL?ldb_strerror(ret):ldb_errstring(ldb_ctx))); } - - static PyObject *py_ldb_set_loadparm(PyObject *self, PyObject *args) { PyObject *py_lp_ctx; @@ -116,33 +114,33 @@ static PyObject *py_ldb_set_opaque_integer(PyObject *self, PyObject *args) if (old_val) { *old_val = value; Py_RETURN_NONE; - } + } tmp_ctx = talloc_new(ldb); if (tmp_ctx == NULL) { PyErr_NoMemory(); return NULL; } - + new_val = talloc(tmp_ctx, int); if (new_val == NULL) { talloc_free(tmp_ctx); PyErr_NoMemory(); return NULL; } - + opaque_name_talloc = talloc_strdup(tmp_ctx, py_opaque_name); if (opaque_name_talloc == NULL) { talloc_free(tmp_ctx); PyErr_NoMemory(); return NULL; } - + *new_val = value; /* cache the domain_sid in the ldb */ ret = ldb_set_opaque(ldb, opaque_name_talloc, new_val); - + if (ret != LDB_SUCCESS) { talloc_free(tmp_ctx); PyErr_SetLdbError(py_ldb_error, ret, ldb); @@ -240,13 +238,12 @@ static PyMethodDef py_samba_ldb_methods[] = { }; static PyTypeObject PySambaLdb = { - .tp_name = "samba.Ldb", + .tp_name = "samba._ldb.Ldb", .tp_doc = "Connection to a LDB database.", .tp_methods = py_samba_ldb_methods, .tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, }; - void init_ldb(void) { PyObject *m; diff --git a/source4/lib/ldb/pyldb.c b/source4/lib/ldb/pyldb.c index 71720d60e0c..354e83d8d33 100644 --- a/source4/lib/ldb/pyldb.c +++ b/source4/lib/ldb/pyldb.c @@ -8,9 +8,9 @@ Copyright (C) 2007-2010 Jelmer Vernooij Copyright (C) 2009-2010 Matthias Dieter Wallnöfer - ** NOTE! The following LGPL license applies to the ldb - ** library. This does NOT imply that all of Samba is released - ** under the LGPL + ** NOTE! The following LGPL license applies to the ldb + ** library. This does NOT imply that all of Samba is released + ** under the LGPL This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -1502,7 +1502,7 @@ static PyObject *PyLdb_FromLdbContext(struct ldb_context *ldb_ctx) static void py_ldb_dealloc(PyLdbObject *self) { talloc_free(self->mem_ctx); - PyObject_Del(self); + self->ob_type->tp_free(self); } PyTypeObject PyLdb = { diff --git a/source4/lib/messaging/pymessaging.c b/source4/lib/messaging/pymessaging.c index 9854f4f95ef..aece5efd09a 100644 --- a/source4/lib/messaging/pymessaging.c +++ b/source4/lib/messaging/pymessaging.c @@ -61,7 +61,7 @@ typedef struct { struct messaging_context *msg_ctx; } messaging_Object; -PyObject *py_messaging_connect(PyTypeObject *self, PyObject *args, PyObject *kwargs) +static PyObject *py_messaging_connect(PyTypeObject *self, PyObject *args, PyObject *kwargs) { struct tevent_context *ev; const char *kwnames[] = { "own_id", "messaging_path", NULL }; @@ -118,7 +118,7 @@ static void py_messaging_dealloc(PyObject *self) { messaging_Object *iface = (messaging_Object *)self; talloc_free(iface->msg_ctx); - PyObject_Del(self); + self->ob_type->tp_free(self); } static PyObject *py_messaging_send(PyObject *self, PyObject *args, PyObject *kwargs) diff --git a/source4/librpc/rpc/pyrpc.c b/source4/librpc/rpc/pyrpc.c index 46f1f061a8f..ffd2376c749 100644 --- a/source4/librpc/rpc/pyrpc.c +++ b/source4/librpc/rpc/pyrpc.c @@ -219,12 +219,11 @@ static PyMethodDef dcerpc_interface_methods[] = { { NULL, NULL, 0, NULL }, }; - static void dcerpc_interface_dealloc(PyObject* self) { dcerpc_InterfaceObject *interface = (dcerpc_InterfaceObject *)self; talloc_free(interface->mem_ctx); - PyObject_Del(self); + self->ob_type->tp_free(self); } static PyObject *dcerpc_interface_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) diff --git a/source4/web_server/wsgi.c b/source4/web_server/wsgi.c index 73e668ebfd7..1c105d0337e 100644 --- a/source4/web_server/wsgi.c +++ b/source4/web_server/wsgi.c @@ -111,7 +111,7 @@ PyTypeObject web_request_Type = { .tp_name = "wsgi.Request", .tp_methods = web_request_methods, .tp_basicsize = sizeof(web_request_Object), - .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .tp_flags = Py_TPFLAGS_DEFAULT, }; typedef struct { @@ -168,7 +168,7 @@ PyTypeObject error_Stream_Type = { .tp_name = "wsgi.ErrorStream", .tp_basicsize = sizeof(error_Stream_Object), .tp_methods = error_Stream_methods, - .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .tp_flags = Py_TPFLAGS_DEFAULT, }; typedef struct { @@ -242,7 +242,7 @@ PyTypeObject input_Stream_Type = { .tp_name = "wsgi.InputStream", .tp_basicsize = sizeof(input_Stream_Object), .tp_methods = input_Stream_methods, - .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .tp_flags = Py_TPFLAGS_DEFAULT, }; static PyObject *Py_InputHttpStream(struct websrv_context *web) -- 2.11.4.GIT