Skip to content

Commit 5c33625

Browse files
committed
Set a finalizer to free marshalled PHPExports
1 parent 2a98715 commit 5c33625

File tree

4 files changed

+17
-4
lines changed

4 files changed

+17
-4
lines changed

php-go/marshal.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,7 @@ func marshalExport(cpe *C.php_export, pe *PHPExport) {
5656
}
5757
cpe.num_outs = C.size_t(len(pe.outs))
5858
}
59+
60+
func freeMarshalled(cpe *CPHPExports) {
61+
C.free_php_exports((*C.php_exports)(cpe))
62+
}

php-go/phpgo.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ php_arg_desc * init_php_export_out(php_export * pe, size_t i) {
2424
}
2525

2626
void free_php_exports(php_exports * pes) {
27-
int i;
28-
for (i = 0; i < pes->exports; i++) {
27+
size_t i;
28+
for (i = 0; i < pes->num_exports; i++) {
2929
php_export * pe = &pes->exports[i];
3030
free(pe->ins);
3131
free(pe->outs);
3232
}
33-
free(pe->exports);
34-
free(pe);
33+
free(pes->exports);
34+
free(pes);
3535
}

php-go/phpgo.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package php
33
import (
44
"fmt"
55
"reflect"
6+
"runtime"
67
"sort"
78
)
89

@@ -54,6 +55,7 @@ func Export(name string, exports map[string]interface{}) *PHPExports {
5455
func newPHPExports(exports map[string]interface{}) (*PHPExports, error) {
5556

5657
phpExports := &PHPExports{}
58+
runtime.SetFinalizer(phpExports, phpExportsFinalizer)
5759

5860
for name, e := range exports {
5961
if pe, err := newPHPExport(name, e); err != nil {
@@ -70,6 +72,12 @@ func newPHPExports(exports map[string]interface{}) (*PHPExports, error) {
7072
return phpExports, nil
7173
}
7274

75+
func phpExportsFinalizer(pes *PHPExports) {
76+
if pes.c != nil {
77+
freeMarshalled(pes.c)
78+
}
79+
}
80+
7381
func newPHPArgDesc(t reflect.Type, nth int) (*PHPArgDesc, error) {
7482

7583
kind, ok := kindMap[t.Kind()]

php-go/phpgo.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ php_exports * new_php_exports(size_t num_exports);
6464
php_export * init_php_exports_export(php_exports * pes, size_t i, size_t num_ins, size_t num_outs);
6565
php_arg_desc * init_php_export_in(php_export * pe, size_t i);
6666
php_arg_desc * init_php_export_out(php_export * pe, size_t i);
67+
void free_php_exports(php_exports * pes);
6768

6869
#endif /* PHPGO_H */
6970

0 commit comments

Comments
 (0)