From: Hans-Dieter K. <fs...@us...> - 2005-07-24 02:41:02
|
Update of /cvsroot/xine/xine-ui/src/xitk In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7391 Modified Files: actions.c event.c main.c mediamark.c panel.c Log Message: Fixed segfaults occuring in several situations when playlist is empty; the if() clauses may look paranoid, but that's just to be sure. Fixed mem-leaks in actions.c (missing pthread_detach() in _gui_dndcallback()) and panel.c (freeing ident in slider_loop(), introduced by myself in 1.221). Furthermore: Corrections in event.c and panel.c Affected files: actions.c event.c main.c mediamark.c panel,c Index: actions.c =================================================================== RCS file: /cvsroot/xine/xine-ui/src/xitk/actions.c,v retrieving revision 1.260 retrieving revision 1.261 diff -u -r1.260 -r1.261 --- actions.c 16 Jul 2005 19:05:30 -0000 1.260 +++ actions.c 24 Jul 2005 02:40:36 -0000 1.261 @@ -1154,7 +1154,8 @@ gGui->ignore_next = 1; - if(gGui->playlist.num && + if(gGui->playlist.num && gGui->playlist.cur >= 0 && gGui->playlist.mmk && + gGui->playlist.mmk[gGui->playlist.cur] && (!strcmp(gGui->playlist.mmk[gGui->playlist.cur]->mrl, gGui->mmk.mrl))) update_mmk = 1; @@ -1282,6 +1283,8 @@ int more_than_one = -2; char *mrl = (char *) data; + pthread_detach(pthread_self()); + if(mrl) { char buffer[strlen(mrl) + 10]; char buffer2[strlen(mrl) + 10]; Index: event.c =================================================================== RCS file: /cvsroot/xine/xine-ui/src/xitk/event.c,v retrieving revision 1.275 retrieving revision 1.276 diff -u -r1.275 -r1.276 --- event.c 16 Jul 2005 19:05:31 -0000 1.275 +++ event.c 24 Jul 2005 02:40:37 -0000 1.276 @@ -651,8 +651,10 @@ int av_offset = (xine_get_param(gGui->stream, XINE_PARAM_AV_OFFSET) - 3600); gGui->mmk.av_offset = av_offset; - if (gGui->playlist.cur < gGui->playlist.num) - gGui->playlist.mmk[gGui->playlist.cur]->av_offset = av_offset; + if (gGui->playlist.num && gGui->playlist.cur >= 0 && gGui->playlist.mmk && + gGui->playlist.mmk[gGui->playlist.cur]) + if (gGui->playlist.cur < gGui->playlist.num) + gGui->playlist.mmk[gGui->playlist.cur]->av_offset = av_offset; xine_set_param(gGui->stream, XINE_PARAM_AV_OFFSET, av_offset); osd_display_info(_("A/V offset: %s"), pts2str(av_offset)); } @@ -663,14 +665,21 @@ int av_offset = (xine_get_param(gGui->stream, XINE_PARAM_AV_OFFSET) + 3600); gGui->mmk.av_offset = av_offset; - if (gGui->playlist.cur < gGui->playlist.num) - gGui->playlist.mmk[gGui->playlist.cur]->av_offset = av_offset; + if (gGui->playlist.num && gGui->playlist.cur >= 0 && gGui->playlist.mmk && + gGui->playlist.mmk[gGui->playlist.cur]) + if (gGui->playlist.cur < gGui->playlist.num) + gGui->playlist.mmk[gGui->playlist.cur]->av_offset = av_offset; xine_set_param(gGui->stream, XINE_PARAM_AV_OFFSET, av_offset); osd_display_info(_("A/V offset: %s"), pts2str(av_offset)); } break; case ACTID_AV_SYNC_RESET: + gGui->mmk.av_offset = 0; + if (gGui->playlist.num && gGui->playlist.cur >= 0 && gGui->playlist.mmk && + gGui->playlist.mmk[gGui->playlist.cur]) + if (gGui->playlist.cur < gGui->playlist.num) + gGui->playlist.mmk[gGui->playlist.cur]->av_offset = 0; xine_set_param(gGui->stream, XINE_PARAM_AV_OFFSET, 0); osd_display_info(_("A/V Offset: reset.")); break; Index: main.c =================================================================== RCS file: /cvsroot/xine/xine-ui/src/xitk/main.c,v retrieving revision 1.307 retrieving revision 1.308 diff -u -r1.307 -r1.308 --- main.c 17 Jul 2005 18:48:40 -0000 1.307 +++ main.c 24 Jul 2005 02:40:37 -0000 1.308 @@ -1042,8 +1042,8 @@ if(gGui->mmk.ident) free(gGui->mmk.ident); - if(gGui->playlist.mmk != NULL && - gGui->playlist.mmk[gGui->playlist.cur] != NULL ) { + if(gGui->playlist.num && gGui->playlist.cur >= 0 && gGui->playlist.mmk && + gGui->playlist.mmk[gGui->playlist.cur]) { if(gGui->playlist.mmk[gGui->playlist.cur]->ident) free(gGui->playlist.mmk[gGui->playlist.cur]->ident); Index: mediamark.c =================================================================== RCS file: /cvsroot/xine/xine-ui/src/xitk/mediamark.c,v retrieving revision 1.100 retrieving revision 1.101 diff -u -r1.100 -r1.101 --- mediamark.c 20 Jul 2005 00:56:52 -0000 1.100 +++ mediamark.c 24 Jul 2005 02:40:37 -0000 1.101 @@ -2636,7 +2636,7 @@ int mediamark_get_shuffle_next(void) { int next = 0; - if(gGui->playlist.num >= 3) { + if(gGui->playlist.num >= 3 && gGui->playlist.cur >= 0) { int remain = gGui->playlist.num; int entries[remain]; float num = (float) gGui->playlist.num; @@ -2695,7 +2695,8 @@ mediamark_t *mediamark_get_current_mmk(void) { - if(gGui->playlist.mmk && gGui->playlist.num) + if(gGui->playlist.num && gGui->playlist.cur >= 0 && gGui->playlist.mmk && + gGui->playlist.mmk[gGui->playlist.cur]) return gGui->playlist.mmk[gGui->playlist.cur]; return (mediamark_t *) NULL; @@ -2703,7 +2704,8 @@ mediamark_t *mediamark_get_mmk_by_index(int index) { - if(gGui->playlist.mmk && index < gGui->playlist.num) + if(index < gGui->playlist.num && index >= 0 && gGui->playlist.mmk && + gGui->playlist.mmk[index]) return gGui->playlist.mmk[index]; return (mediamark_t *) NULL; @@ -2711,7 +2713,9 @@ const char *mediamark_get_current_mrl(void) { - if(gGui->playlist.mmk && gGui->playlist.num && (gGui->playlist.cur < gGui->playlist.num)) + if(gGui->playlist.num && gGui->playlist.cur >= 0 && gGui->playlist.mmk && + gGui->playlist.mmk[gGui->playlist.cur] && + gGui->playlist.cur < gGui->playlist.num) return gGui->playlist.mmk[gGui->playlist.cur]->mrl; return NULL; @@ -2719,7 +2723,8 @@ const char *mediamark_get_current_ident(void) { - if(gGui->playlist.mmk && gGui->playlist.num) + if(gGui->playlist.num && gGui->playlist.cur >= 0 && gGui->playlist.mmk && + gGui->playlist.mmk[gGui->playlist.cur]) return gGui->playlist.mmk[gGui->playlist.cur]->ident; return NULL; @@ -2727,7 +2732,8 @@ const char *mediamark_get_current_sub(void) { - if(gGui->playlist.mmk && gGui->playlist.num) + if(gGui->playlist.num && gGui->playlist.cur >= 0 && gGui->playlist.mmk && + gGui->playlist.mmk[gGui->playlist.cur]) return gGui->playlist.mmk[gGui->playlist.cur]->sub; return NULL; @@ -2735,10 +2741,10 @@ void mediamark_free_entry(int offset) { - if(gGui->playlist.num && (offset < gGui->playlist.num)) { + if(offset < gGui->playlist.num && offset >= 0 && gGui->playlist.mmk && + gGui->playlist.mmk[offset]) if(mediamark_free_mmk(&gGui->playlist.mmk[offset])) gGui->playlist.num--; - } } int mediamark_concat_mediamarks(const char *_filename) { Index: panel.c =================================================================== RCS file: /cvsroot/xine/xine-ui/src/xitk/panel.c,v retrieving revision 1.225 retrieving revision 1.226 diff -u -r1.225 -r1.226 --- panel.c 16 Jul 2005 19:05:33 -0000 1.225 +++ panel.c 24 Jul 2005 02:40:37 -0000 1.226 @@ -385,7 +385,8 @@ pthread_mutex_lock(&gGui->xe_mutex); - if(gGui->playlist.num && gGui->mmk.end != -1) { + if(gGui->playlist.num && gGui->playlist.cur >= 0 && gGui->playlist.mmk && + gGui->playlist.mmk[gGui->playlist.cur] && gGui->mmk.end != -1) { if(secs >= gGui->playlist.mmk[gGui->playlist.cur]->end) { gGui->ignore_next = 0; gui_playlist_start_next(); @@ -428,7 +429,8 @@ char *ident = stream_infos_get_ident_from_stream(gGui->stream); if(ident) { - if(gGui->playlist.num) { + if(gGui->playlist.num && gGui->playlist.cur >= 0 && gGui->playlist.mmk && + gGui->playlist.mmk[gGui->playlist.cur]) { if(strcmp(gGui->mmk.ident, ident)) { if(gGui->mmk.ident) free(gGui->mmk.ident); @@ -442,8 +444,8 @@ playlist_mrlident_toggle(); panel_update_mrl_display(); } - free(ident); } + free(ident); } else video_window_set_mrl((char *)gGui->mmk.mrl); @@ -808,9 +810,9 @@ int wx, wy; xitk_get_window_position(gGui->display, gGui->panel_window, &wx, &wy, NULL, NULL); - xitk_get_widget_pos(panel->audiochan_label, &x, &y); + xitk_get_widget_pos(panel->spuid_label, &x, &y); x += wx; - y += (wy + xitk_get_widget_height(panel->audiochan_label)); + y += (wy + xitk_get_widget_height(panel->spuid_label)); spu_lang_menu(panel->widget_list, x, y); } /* |