svn commit: samba r9464 - in branches/SAMBA_4_0/source:
lib/appweb/mpr scripting/ejs
tridge at samba.org
tridge at samba.org
Mon Aug 22 01:51:03 GMT 2005
Author: tridge
Date: 2005-08-22 01:51:02 +0000 (Mon, 22 Aug 2005)
New Revision: 9464
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=9464
Log:
fixed a problem with child pointers copied into non-allocated mpr variables. We
now use the same free technique as is used for mpr strings, rather than relying on
being a child of the variable
Modified:
branches/SAMBA_4_0/source/lib/appweb/mpr/var.c
branches/SAMBA_4_0/source/scripting/ejs/mprutil.c
Changeset:
Modified: branches/SAMBA_4_0/source/lib/appweb/mpr/var.c
===================================================================
--- branches/SAMBA_4_0/source/lib/appweb/mpr/var.c 2005-08-22 00:22:21 UTC (rev 9463)
+++ branches/SAMBA_4_0/source/lib/appweb/mpr/var.c 2005-08-22 01:51:02 UTC (rev 9464)
@@ -181,6 +181,13 @@
}
break;
+ case MPR_TYPE_PTR:
+ if (vp->allocatedData) {
+ vp->allocatedData = 0;
+ mprFree(vp->ptr);
+ }
+ break;
+
case MPR_TYPE_OBJECT:
#if VAR_DEBUG
/*
@@ -1418,7 +1425,12 @@
case MPR_TYPE_PTR:
/* we have to reference here so talloc structures survive a
copy */
- dest->ptr = talloc_reference(dest, src->ptr);
+ if (src->allocatedData) {
+ dest->ptr = talloc_reference(mprMemCtx(), src->ptr);
+ dest->allocatedData = 1;
+ } else {
+ dest->ptr = src->ptr;
+ }
break;
case MPR_TYPE_STRING_CFUNCTION:
Modified: branches/SAMBA_4_0/source/scripting/ejs/mprutil.c
===================================================================
--- branches/SAMBA_4_0/source/scripting/ejs/mprutil.c 2005-08-22 00:22:21 UTC (rev 9463)
+++ branches/SAMBA_4_0/source/scripting/ejs/mprutil.c 2005-08-22 01:51:02 UTC (rev 9464)
@@ -369,12 +369,14 @@
}
/*
- set a pointer in a existing MprVar, making it a child of the property
+ set a pointer in a existing MprVar, freeing it when the property goes away
*/
void mprSetPtrChild(struct MprVar *v, const char *propname, const void *p)
{
mprSetVar(v, propname, mprCreatePtrVar(discard_const(p)));
- talloc_steal(mprGetProperty(v, propname, NULL), p);
+ v = mprGetProperty(v, propname, NULL);
+ v->allocatedData = 1;
+ talloc_steal(mprMemCtx(), p);
}
/*
More information about the samba-cvs
mailing list