diff options
author | Tuomas Virtanen <katajakasa@gmail.com> | 2018-04-06 00:26:29 +0300 |
---|---|---|
committer | Tuomas Virtanen <katajakasa@gmail.com> | 2018-04-06 00:27:12 +0300 |
commit | 15ccb6a80bd3ecb459d459cabb10637d44185548 (patch) | |
tree | 0935f901e2ead12fb085c77fa6073d03bcc50cc6 | |
parent | 66c585d2630a10c8625fa56eec9ddd324c81a41e (diff) |
Clean up player creation function error handling
-rw-r--r-- | src/kitplayer.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/kitplayer.c b/src/kitplayer.c index 42bfc3a..6c20282 100644 --- a/src/kitplayer.c +++ b/src/kitplayer.c @@ -121,41 +121,49 @@ Kit_Player* Kit_CreatePlayer(const Kit_Source *src) { // Initialize audio decoder player->audio_dec = Kit_CreateAudioDecoder(src, &player->aformat); if(player->audio_dec == NULL && src->audio_stream_index >= 0) { - goto error; + goto exit_0; } // Initialize video decoder player->video_dec = Kit_CreateVideoDecoder(src, &player->vformat); if(player->video_dec == NULL && src->video_stream_index >= 0) { - goto error; + goto exit_1; } // Initialize subtitle decoder player->subtitle_dec = Kit_CreateSubtitleDecoder( src, &player->sformat, player->vformat.width, player->vformat.height); if(player->subtitle_dec == NULL && src->subtitle_stream_index >= 0) { - goto error; + goto exit_2; } // Decoder thread lock player->dec_lock = SDL_CreateMutex(); if(player->dec_lock == NULL) { Kit_SetError("Unable to create a decoder thread lock mutex: %s", SDL_GetError()); - goto error; + goto exit_3; } // Decoder thread player->dec_thread = SDL_CreateThread(_DecoderThread, "Kit Decoder Thread", player); if(player->dec_thread == NULL) { Kit_SetError("Unable to create a decoder thread: %s", SDL_GetError()); - goto error; + goto exit_4; } player->src = src; return player; -error: - Kit_ClosePlayer(player); +exit_4: + SDL_DestroyMutex(player->dec_lock); +exit_3: + Kit_CloseDecoder(player->subtitle_dec); +exit_2: + Kit_CloseDecoder(player->video_dec); +exit_1: + Kit_CloseDecoder(player->audio_dec); +exit_0: + free(player); return NULL; } |