diff --git a/src/cgi.h b/src/cgi.h index 93eb035..cbe748c 100644 --- a/src/cgi.h +++ b/src/cgi.h @@ -115,6 +115,17 @@ extern void cgi_session_cookie_name(const char *cookie_name); extern char *cgi_session_var(const char *name); extern void cgi_session_save_path(const char *path); +/** + * Free all remaining things explicitly or implicitly allocated by a + * session. + * + * @note This is some kind of workaround, you still have to call + * cgi_end(), but maybe not cgi_destroy() … :-/ + * + * @see https://github.com/rafaelsteil/libcgi/issues/25 + */ +void cgi_session_free( void ); + #ifdef __cplusplus } #endif diff --git a/src/session.c b/src/session.c index 1b69781..190e95d 100644 --- a/src/session.c +++ b/src/session.c @@ -56,6 +56,7 @@ * @{ */ +#include #include #include #include @@ -76,7 +77,7 @@ FILE *sess_file; static char sess_id[SESS_ID_LEN + 1]; -static char *sess_fname; +static char *sess_fname = NULL; static unsigned int save_path_len; char SESSION_SAVE_PATH[255] = "/tmp/"; @@ -550,6 +551,12 @@ int cgi_session_start() return 1; } +void cgi_session_free( void ) +{ + free( sess_fname ); + sess_fname = NULL; +} + /** * @} */