No so_instance cleanup can be done if PacketDrill test fails
- Dominant language
- C
- Stars
- 975
- Forks
- 238
- PR merge metrics
- No merged PRs in 30d
Description
Hi,
I am working with using PacketDrill to test some network stacks using a shared object file.
I just noticed that when a test line in the PacketDrill script fails, the application exits without calling the free() function in the shared object file.
At the conclusion of each test, state_free (defined in run.c:122) is called and this frees the netdev and packet buffers and calls the free function in the so_instance where subsequent buffers in the shared object file can be freed.
```
close_all_fds(state);
netdev_free(state->netdev);
packets_free(state->packets);
code_free(state->code);
if (state->wire_client)
wire_client_free(state->wire_client);
if (state->so_instance)
so_instance_free(state->so_instance);
```
In run_system_call.c:3338, If an error occurs, the die function is called
```
die("%s:%d: runtime error in %s call: %s\n",
state->config->script_path, event->line_number,
syscall->name, error);
free(error);
```
And in the implementation of die in logging.c, no function is called to free the state
```
extern void __attribute__((noreturn)) die(char *format, ...)
{
va_list ap;
va_start(ap, format);
vfprintf(stderr, format, ap);
va_end(ap);
run_cleanup_command();
exit(EXIT_FAILURE);
}
```
As a result, when an error occurs during a test, the cleanup is not done completely.
Is this an expected behavior? If I want to call a function on my shared object file at the failure of each test, does the current PacketDrill implementation provide any support?
Contributor guide
Assessment
This issue has not been assessed yet.