That's exactly the problem --- if you pass computed values directly via a C function call, you're probably missing a root. The only safe way to do this call is

```
jl_value_t **argv;
JL_GC_PUSHARGS(argv, 2);
argv[0] = new_thing1();
argv[1] = new_thing2();
jl_apply(f, argv, 2);
JL_GC_POP();
```

This code pattern cannot be wrapped in a C function that simply accepts the values of `new_thing1()` and `new_thing2()`.