From 35e71bcb76b702a8b67fd556083c5df50273fe4c Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Mon, 25 Oct 2010 12:12:12 +0200 Subject: piano: Destroy existing user info on reauth --- libpiano/src/piano.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/libpiano/src/piano.c b/libpiano/src/piano.c index 4354fa6..1d63e8e 100644 --- a/libpiano/src/piano.c +++ b/libpiano/src/piano.c @@ -164,15 +164,20 @@ void PianoDestroyGenres (PianoGenre_t *genres) { } } +/* destroy user information + */ +void PianoDestroyUserInfo (PianoUserInfo_t *user) { + PianoFree (user->webAuthToken, 0); + PianoFree (user->authToken, 0); + PianoFree (user->listenerId, 0); +} + /* frees the whole piano handle structure * @param piano handle * @return nothing */ void PianoDestroy (PianoHandle_t *ph) { - PianoFree (ph->user.webAuthToken, 0); - PianoFree (ph->user.authToken, 0); - PianoFree (ph->user.listenerId, 0); - + PianoDestroyUserInfo (&ph->user); PianoDestroyStations (ph->stations); /* destroy genre stations */ PianoGenreCategory_t *curGenreCat = ph->genreStations, *lastGenreCat; @@ -796,6 +801,11 @@ PianoReturn_t PianoResponse (PianoHandle_t *ph, PianoRequest_t *req) { } case 1: + /* information exists when reauthenticating, destroy to + * avoid memleak */ + if (ph->user.listenerId != NULL) { + PianoDestroyUserInfo (&ph->user); + } ret = PianoXmlParseUserinfo (ph, req->responseData); break; } -- cgit v1.2.3