Currently, it's correct, but there are two places we can improve it.
1. We should assert that current == Thread::current(). if it is not case, then we intermix NEW_RESOURCE_ARRAY_IN_THREAD(current, char, path_len) and FREE_RESOURCE_ARRAY(char, path, path_len)!
2. We don't need to call FREE_RESOURCE_ARRAY(char, path, path_len) for path. it won't release anything because buffer stands in its way.
thread's resource area is like this. Afree(path, path_len) won't reclaim the space.
|path | buffer |...|
^hwm
1. We should assert that current == Thread::current(). if it is not case, then we intermix NEW_RESOURCE_ARRAY_IN_THREAD(current, char, path_len) and FREE_RESOURCE_ARRAY(char, path, path_len)!
2. We don't need to call FREE_RESOURCE_ARRAY(char, path, path_len) for path. it won't release anything because buffer stands in its way.
thread's resource area is like this. Afree(path, path_len) won't reclaim the space.
|path | buffer |...|
^hwm