summaryrefslogtreecommitdiffstats
path: root/bindings
diff options
context:
space:
mode:
authorFrederic Peters <fpeters@entrouvert.com>2008-04-29 12:10:23 +0000
committerFrederic Peters <fpeters@entrouvert.com>2008-04-29 12:10:23 +0000
commitaad2fbfc439d7f5207ab4d65ff2b3355508c157b (patch)
tree4b988a4c08bfd9e7472a496902b94e700a23d6c3 /bindings
parentcd1df0cf8df0b0d6962443ad4ffffb5f2929ddf2 (diff)
downloadlasso-aad2fbfc439d7f5207ab4d65ff2b3355508c157b.tar.gz
lasso-aad2fbfc439d7f5207ab4d65ff2b3355508c157b.tar.xz
lasso-aad2fbfc439d7f5207ab4d65ff2b3355508c157b.zip
[project @ fpeters@0d.be-20080416142356-cl3d6hb3ru62p8xv]
Damien Laniel 2008-04-16 added PHPGObject destructors and fixed some memory management Original author: Frederic Peters <fpeters@0d.be> Date: 2008-04-16 16:23:56.715000+02:00
Diffstat (limited to 'bindings')
-rw-r--r--bindings/lang_php5_helpers/php_code.py4
-rw-r--r--bindings/lang_php5_helpers/wrapper_source.py8
-rw-r--r--bindings/lang_php5_helpers/wrapper_source_top.c18
-rw-r--r--bindings/php5/Makefile.am2
-rwxr-xr-xbindings/php5/tests/binding_tests.php1
-rwxr-xr-xbindings/php5/tests/profile_tests.php1
6 files changed, 25 insertions, 9 deletions
diff --git a/bindings/lang_php5_helpers/php_code.py b/bindings/lang_php5_helpers/php_code.py
index fe69bee9..a15a08b1 100644
--- a/bindings/lang_php5_helpers/php_code.py
+++ b/bindings/lang_php5_helpers/php_code.py
@@ -72,7 +72,7 @@ if (!extension_loaded('lasso')) {
* Convert a C object to a PHP object
*/
function cptrToPhp ($cptr) {
- if (is_null($cptr)) return null;
+ if (is_null($cptr) || !$cptr) return null;
$typename = lasso_get_object_typename($cptr);
$class_name = $typename . "NoInit";
$obj = new $class_name();
@@ -138,7 +138,7 @@ function getRequestTypeFromSoapMsg($mesg) {
php_args = ', '.join(php_args)
c_args = ', '.join(c_args)
- # XXX: could check self._cptr.typename to see if it got the
+ # XXX: could check $this->_cptr->typename to see if it got the
# right class type
print >> self.fd, ' public $_cptr = null;'
print >> self.fd, ''
diff --git a/bindings/lang_php5_helpers/wrapper_source.py b/bindings/lang_php5_helpers/wrapper_source.py
index 3905d048..46ea5f60 100644
--- a/bindings/lang_php5_helpers/wrapper_source.py
+++ b/bindings/lang_php5_helpers/wrapper_source.py
@@ -64,7 +64,7 @@ class WrapperSource:
print >> self.fd, '''\
PHP_MINIT_FUNCTION(lasso)
{
- le_lasso_server = zend_register_list_destructors_ex(NULL, NULL, PHP_LASSO_SERVER_RES_NAME, module_number);
+ le_lasso_server = zend_register_list_destructors_ex(php_gobject_generic_destructor, NULL, PHP_LASSO_SERVER_RES_NAME, module_number);
'''
def generate_constants(self):
@@ -149,9 +149,7 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
else:
print >> self.fd, '''\
if (return_c_value) {
- self = (PhpGObjectPtr *)emalloc(sizeof(PhpGObjectPtr));
- self->obj = G_OBJECT(return_c_value);
- self->typename = estrdup(G_OBJECT_TYPE_NAME(G_OBJECT(return_c_value)));
+ self = PhpGObjectPtr_New(G_OBJECT(return_c_value));
ZEND_REGISTER_RESOURCE(return_value, self, le_lasso_server);
} else {
RETURN_NULL();
@@ -287,7 +285,7 @@ PHP_MSHUTDOWN_FUNCTION(lasso)
if self.is_object(m_type):
print >> self.fd, ' if (this->%s != NULL) {' % m_name
- print >> self.fd, ' return_c_value = g_object_ref(this->%s);' % m_name
+ print >> self.fd, ' return_c_value = this->%s;' % m_name
print >> self.fd, ' }'
else:
print >> self.fd, ' return_c_value = this->%s;' % m_name
diff --git a/bindings/lang_php5_helpers/wrapper_source_top.c b/bindings/lang_php5_helpers/wrapper_source_top.c
index 34e1e1b0..4835913c 100644
--- a/bindings/lang_php5_helpers/wrapper_source_top.c
+++ b/bindings/lang_php5_helpers/wrapper_source_top.c
@@ -34,7 +34,7 @@ PhpGObjectPtr_New(GObject *obj)
}
self = (PhpGObjectPtr *)emalloc(sizeof(PhpGObjectPtr));
- self->obj = obj;
+ self->obj = g_object_ref(obj);
self->typename = estrdup(G_OBJECT_TYPE_NAME(obj));
return self;
@@ -53,6 +53,22 @@ PHP_FUNCTION(lasso_get_object_typename)
RETURN_STRING(self->typename, 1);
}
+/* Generic destructor for PHP GObject */
+static void php_gobject_generic_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
+{
+ PhpGObjectPtr* gobject = (PhpGObjectPtr*)rsrc->ptr;
+
+ if (gobject) {
+ if (gobject->obj) {
+ g_object_unref(G_OBJECT(gobject->obj));
+ }
+ if (gobject->typename) {
+ efree(gobject->typename);
+ }
+ efree(gobject);
+ }
+}
+
/* List handling */
static void
free_glist(GList **list, GFunc free_function) {
diff --git a/bindings/php5/Makefile.am b/bindings/php5/Makefile.am
index ea89d36a..1ff0023f 100644
--- a/bindings/php5/Makefile.am
+++ b/bindings/php5/Makefile.am
@@ -21,7 +21,7 @@ if WSF_ENABLED
EXTRA_ARGS = --enable-id-wsf
endif
-lasso.php _lasso.c: ../lang_php5.py ../lang_php5_helpers/php_code.py ../lang_php5_helpers/wrapper_source.py
+lasso.php _lasso.c: ../lang_php5.py ../lang_php5_helpers/php_code.py ../lang_php5_helpers/wrapper_source.py ../lang_php5_helpers/wrapper_source_top.c
$(PYTHON) $(top_srcdir)/bindings/bindings.py -l php5 --src-dir=$(top_srcdir)/lasso/ $(EXTRA_ARGS)
doc:
diff --git a/bindings/php5/tests/binding_tests.php b/bindings/php5/tests/binding_tests.php
index 240be092..4c9fb962 100755
--- a/bindings/php5/tests/binding_tests.php
+++ b/bindings/php5/tests/binding_tests.php
@@ -1,3 +1,4 @@
+#!/usr/bin/php
<?php
# Lasso - A free implementation of the Liberty Alliance specifications.
#
diff --git a/bindings/php5/tests/profile_tests.php b/bindings/php5/tests/profile_tests.php
index 71d525bf..a6497a3b 100755
--- a/bindings/php5/tests/profile_tests.php
+++ b/bindings/php5/tests/profile_tests.php
@@ -1,3 +1,4 @@
+#!/usr/bin/php
<?php
# Lasso - A free implementation of the Liberty Alliance specifications.
#