[Go] Fix segfault on string tensors with mismatched dimensions #50508
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
This PR fixes a segmentation violation that may occur during GC on string tensors. The segfault results in a flaky test for
TestNewTensorat the error test for mismatched dimensions for stringstensorflow/tensorflow/go/tensor_test.go
Lines 86 to 87 in c837cf8
For string tensors,
C.TF_TString_Deallocis called during garbage collection within a finalizer function. However, tensor structure isn't checked until encoding to avoid a performance penalty. The current method for dealloc assumes that encoding succeeded, but segfaults when a string tensor is garbage collected whose encoding failed (e.g., due to mismatched dimensions).To fix this, the call to set the finalizer function is deferred until
NewTensorreturns and, if encoding failed for a string tensor, deallocs are determined based on bytes written.