What is wrong with calling the free_results() function here?

This seems strange. Perhaps something else is going on that isn't fully understood?

Either way I think calls to ODBC APIs should be wrapped with the Py_BEGIN_ALLOW_THREADS/Py_END_ALLOW_THREADS so the GIL is released