summaryrefslogtreecommitdiff
path: root/pad.h
diff options
context:
space:
mode:
authorPaul "LeoNerd" Evans <leonerd@leonerd.org.uk>2023-02-14 22:50:42 +0000
committerPaul Evans <leonerd@leonerd.org.uk>2023-02-17 21:06:16 +0000
commit04c0207ebb3cb7f894b5f5b6320970aabda477a9 (patch)
treeeb8c26eb2998fb14f91d013b9a7a1618b3b8c7f6 /pad.h
parent7da1927c007a205d378f1913ba5dd4027799926e (diff)
downloadperl-04c0207ebb3cb7f894b5f5b6320970aabda477a9.tar.gz
Fix a bunch of memory leaks in feature 'class'
* Free the attrlist OP fragment when applying class or field attribute * Free the OP_PADxV ops we only use to get the pad index out for fieldvar declarations * Add a refcount to the `struct padname_fieldinfo` to keep track of its capture in inner closures so it can be freed at the right time * Free the class-related fields out of HvAUX * Free the actual ObjectFIELDS() array when destroying an object instance * Dup fieldinfo->paramname at sv_dup() time / free it at free time
Diffstat (limited to 'pad.h')
-rw-r--r--pad.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/pad.h b/pad.h
index 53b27bb3bf..8f339ae6c4 100644
--- a/pad.h
+++ b/pad.h
@@ -94,6 +94,7 @@ struct padname_with_str {
* own substructure, stored in ->xpadn_fieldinfo.
*/
struct padname_fieldinfo {
+ U32 refcount;
PADOFFSET fieldix; /* index of this field within ObjectFIELDS() array */
HV *fieldstash; /* original class package which added this field */
OP *defop; /* optree fragment for defaulting expression */