I have C-code translated in D that acts sometimes incorrect if the GC has made some collect. I would like to know why.
- Code runs correct if the GC collections are off
- There are no allocations within the C-translated-code except
throw new(but they are not called)
- All allocations made in C-translated-code are still calloc/malloc `ed
- Even if I disable the GC before calling the function and just enable it after there will be an incorrect result
- Data passed to the function belongs to a struct and the function is called in a member function and is always correct
The main public function accepts a char* and returns a char*. Signature is like this:
char* fun(ref int, ref int, size_t, const char*, out int, out int, out int, uint);
Input paramter gets the pointer from char
.ptr property (and length must be supplied too).
I didn't want to change the code much so I have some piece like that:
// const char *s2 = "!\"#$%&'()*+,-./:;<=>?@[\\]^_"; char* s2 = "!\"#$%&'()*+,-./:;<=>?@[\\]^_".dup.ptr;
Could this cause the issue? But the pointer is not used outside the function where it's created.