Skip to content

Commit 763a649

Browse files
committed
fix(session): Fix CGO pointer rules
It seems that Go needs to keep track of memory allocated by itself. However, when this gets mixed with memory allocated from external functions (eg C), things get complicated. In order to avoid these issues, we define all internal structs as pointers to C structures instead of allocated C structure in Go. Signed-off-by: Kostis Papazafeiropoulos <papazof@nubificus.co.uk> Signed-off-by: Apostolos Giannousas <agian@nubificus.co.uk> Signed-off-by: Anastassios Nanos <ananos@nubificus.co.uk>
1 parent 6e556bf commit 763a649

8 files changed

Lines changed: 19 additions & 19 deletions

File tree

vaccel/exec.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ func ExecWithResource(sess *Session, res *Resource, funcname string,
2020
cNrRead := C.size_t(read.cList.size)
2121
cNrWrite := C.size_t(write.cList.size)
2222

23-
cRet := C.vaccel_exec_with_resource(&sess.cSess, res.cRes, cfunc, cread, cNrRead, cwrite, cNrWrite) //nolint:gocritic
23+
cRet := C.vaccel_exec_with_resource(sess.cSess, res.cRes, cfunc, cread, cNrRead, cwrite, cNrWrite) //nolint:gocritic
2424

2525
return int(cRet)
2626

vaccel/genop.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ func Genop(sess *Session, read *ArgList, write *ArgList) int {
1818
cNrRead := C.int(read.cList.size)
1919
cNrWrite := C.int(write.cList.size)
2020

21-
cRet := C.vaccel_genop(&sess.cSess, cRead, cNrRead, cWrite, cNrWrite) //nolint:gocritic
21+
cRet := C.vaccel_genop(sess.cSess, cRead, cNrRead, cWrite, cNrWrite) //nolint:gocritic
2222
return int(cRet)
2323

2424
}

vaccel/image_classification.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ func ImageClassificationFromFile(sess *Session, imagePath string) (string, int)
3535
defer C.free(unsafe.Pointer(cOutImageName))
3636

3737
cRet := C.vaccel_image_classification(
38-
&sess.cSess, cImgBuf, cText, cOutImageName,
38+
sess.cSess, cImgBuf, cText, cOutImageName,
3939
cImgLen, C.size_t(256), C.size_t(256)) //nolint:gocritic
4040

4141
var golangOut string
@@ -66,7 +66,7 @@ func ImageClassification(sess *Session, image []byte) (string, int) {
6666
defer C.free(unsafe.Pointer(cOutImageName))
6767

6868
cRet := C.vaccel_image_classification(
69-
&sess.cSess, cImgBuf, cText, cOutImageName,
69+
sess.cSess, cImgBuf, cText, cOutImageName,
7070
cImgLen, C.size_t(256), C.size_t(256)) //nolint:gocritic
7171

7272
var golangOut string

vaccel/noop.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ package vaccel
1111
import "C"
1212

1313
func NoOp(sess *Session) int {
14-
return int(C.vaccel_noop(&sess.cSess)) //nolint:gocritic
14+
return int(C.vaccel_noop(sess.cSess)) //nolint:gocritic
1515
}

vaccel/session.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,31 +11,31 @@ package vaccel
1111
import "C"
1212

1313
type Session struct {
14-
cSess C.struct_vaccel_session
14+
cSess *C.struct_vaccel_session
1515
}
1616

1717
func (s *Session) Init(flags uint32) int {
18-
return int(C.vaccel_session_init(&s.cSess, C.uint32_t(flags))) //nolint:gocritic
18+
return int(C.vaccel_session_new(&s.cSess, C.uint32_t(flags))) //nolint:gocritic
1919
}
2020

2121
func (s *Session) Release() int {
22-
return int(C.vaccel_session_release(&s.cSess)) //nolint:gocritic
22+
return int(C.vaccel_session_delete(s.cSess)) //nolint:gocritic
2323
}
2424

2525
func (s *Session) Register(r *Resource) int {
26-
return int(C.vaccel_resource_register(r.cRes, &s.cSess)) //nolint:gocritic
26+
return int(C.vaccel_resource_register(r.cRes, s.cSess)) //nolint:gocritic
2727
}
2828

2929
func (s *Session) Unregister(r *Resource) int {
30-
return int(C.vaccel_resource_unregister(r.cRes, &s.cSess)) //nolint:gocritic
30+
return int(C.vaccel_resource_unregister(r.cRes, s.cSess)) //nolint:gocritic
3131
}
3232

3333
func (s *Session) GetID() int64 {
3434
return int64(s.cSess.id)
3535
}
3636

3737
func (s *Session) Update(flags uint32) int {
38-
return int(C.vaccel_session_update(&s.cSess, C.uint32_t(flags))) //nolint:gocritic
38+
return int(C.vaccel_session_update(s.cSess, C.uint32_t(flags))) //nolint:gocritic
3939
}
4040

4141
func (s *Session) GetFlags() int32 {

vaccel/tf.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ func TFModelLoad(sess *Session, model *Resource, status *TFStatus) int {
300300
return EINVAL
301301
}
302302

303-
return int(C.vaccel_tf_model_load(&sess.cSess, model.cRes, &status.cTFStatus)) //nolint:gocritic
303+
return int(C.vaccel_tf_model_load(sess.cSess, model.cRes, &status.cTFStatus)) //nolint:gocritic
304304
}
305305

306306
func TFModelRun(
@@ -337,7 +337,7 @@ func TFModelRun(
337337
defer C.free(cOutPtr)
338338

339339
ret := int(C.vaccel_tf_model_run(
340-
&sess.cSess,
340+
sess.cSess,
341341
model.cRes,
342342
func() *C.struct_vaccel_tf_buffer {
343343
if runOptions != nil {
@@ -402,6 +402,6 @@ func TFModelRun(
402402
}
403403

404404
func TFModelUnload(sess *Session, model *Resource, status *TFStatus) int {
405-
err := int(C.vaccel_tf_model_unload(&sess.cSess, model.cRes, &status.cTFStatus)) //nolint:gocritic
405+
err := int(C.vaccel_tf_model_unload(sess.cSess, model.cRes, &status.cTFStatus)) //nolint:gocritic
406406
return err
407407
}

vaccel/tflite.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ func TFLiteModelLoad(sess *Session, model *Resource) int {
230230
return EINVAL
231231
}
232232

233-
return int(C.vaccel_tflite_model_load(&sess.cSess, model.cRes)) //nolint:gocritic
233+
return int(C.vaccel_tflite_model_load(sess.cSess, model.cRes)) //nolint:gocritic
234234
}
235235

236236
func TFLiteModelRun(
@@ -264,7 +264,7 @@ func TFLiteModelRun(
264264

265265
var cStatus C.uint8_t
266266
ret := int(C.vaccel_tflite_model_run(
267-
&sess.cSess,
267+
sess.cSess,
268268
model.cRes,
269269
(**C.struct_vaccel_tflite_tensor)(cInPtr),
270270
C.int(nrInputs),
@@ -321,6 +321,6 @@ func TFLiteModelRun(
321321
}
322322

323323
func TFLiteModelUnload(sess *Session, model *Resource) int {
324-
err := int(C.vaccel_tflite_model_unload(&sess.cSess, model.cRes)) //nolint:gocritic
324+
err := int(C.vaccel_tflite_model_unload(sess.cSess, model.cRes)) //nolint:gocritic
325325
return err
326326
}

vaccel/torch.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ func TorchModelLoad(sess *Session, model *Resource) int {
190190
return EINVAL
191191
}
192192

193-
return int(C.vaccel_torch_model_load(&sess.cSess, model.cRes)) //nolint:gocritic
193+
return int(C.vaccel_torch_model_load(sess.cSess, model.cRes)) //nolint:gocritic
194194
}
195195

196196
func TorchModelRun(
@@ -231,7 +231,7 @@ func TorchModelRun(
231231
}
232232

233233
ret := int(C.vaccel_torch_model_run(
234-
&sess.cSess,
234+
sess.cSess,
235235
model.cRes,
236236
bufPtr,
237237
(**C.struct_vaccel_torch_tensor)(cInPtr),

0 commit comments

Comments
 (0)