Bug 59652 - juk crashes on multiple playlist select
Summary: juk crashes on multiple playlist select
Status: RESOLVED FIXED
Alias: None
Product: juk
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: Compiled Sources Linux
: NOR crash
Target Milestone: ---
Assignee: Scott Wheeler
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2003-06-11 15:04 UTC by Jord Swart
Modified: 2003-07-07 01:54 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Jord Swart 2003-06-11 15:04:59 UTC
Version:           1.90 (using KDE Devel)
Installed from:    Compiled sources
OS:          Linux

It looks kinda related to wish (bug) number: 56258.

Here the feature is described: clicking control to select multiple playlists.

When I do that, bang boom crash. No more juk. Too bad, since it really is a nice application.

I'm using debian snapshot (cvs >= 20030606) binaries from: http://oberlin.cems.umn.edu/kdecvs/debian (I guess they are pretty well known).
Might be the binaries, since I know they do patch some things.

My juk version is 1.90 (2.0 pre-alpha).

I have experienced some other crashes as well, but none are really reproducable (this one is). They give the application a pretty buggy feeling. For a pre-alpha, I expect nothing else, but I wanted to note it anyway.

Thanks for taking time, reading this and making the software.

Jord
Comment 1 Scott Wheeler 2003-06-11 15:21:36 UTC
Subject: Re:  New: juk crashes on multiple playlist select         

Yes, I know about this.  This has only been happening for a few days (maybe a 
week or so).  I'm even pretty sure where the bug is, but just didn't get a 
chance to commit a fix yet. 

Comment 2 Scott Wheeler 2003-06-11 15:26:32 UTC
Oh, and I forgot to mention, stable JuK packages do exist (well, as do stable KDE packages) 
-- you're using the one that's Guaranteed Buggy (tm) (for this is the nature of things in CVS). 
Comment 3 Jord Swart 2003-06-11 15:39:35 UTC
Subject: Re:  juk crashes on multiple playlist select

> Yes, I know about this.  This has only been happening for a few days 
> (maybe a  
> week or so).  I'm even pretty sure where the bug is, but just didn't get a

>  
> chance to commit a fix yet. 
 
Wow, you must hold the record for quick responses ;-) 
 
Love juk by the way, anything I can do to help out? I is not a c++ engineer,
but 
guess I could make my way into one... if the code is not too hard that is. 
 
Jord  

Comment 4 Jord Swart 2003-06-11 15:41:50 UTC
Subject: Re:  juk crashes on multiple playlist select

> ------- You are receiving this mail because: ------- 
> You reported the bug, or are watching the reporter. 
>       
> http://bugs.kde.org/show_bug.cgi?id=59652      
> wheeler@kde.org changed: 
>  
>            What    |Removed                     |Added 
>
---------------------------------------------------------------------------- 
>              Status|UNCONFIRMED                 |ASSIGNED 
>       everconfirmed|0                           |1 
>  
>  
>  
> ------- Additional Comments From wheeler@kde.org  2003-06-11 15:26 -------

> Oh, and I forgot to mention, stable JuK packages do exist (well, as do 
> stable KDE packages)  
> -- you're using the one that's Guaranteed Buggy (tm) (for this is the 
> nature of things in CVS). 
>  
I know and love it. Kate is broken too at the moment, don't love that, but
well... 
 
Thought is was a good idea to file bugs anyway. Thought it would help out
making 
software stable on different platforms. 
 
Jord 

Comment 5 Scott Wheeler 2003-07-07 01:54:21 UTC
Subject: kdemultimedia/juk

CVS commit by wheeler: 

Don't crash on multiple selection.

Since this code is also a littly hairy, I added some big explanatory notes
as to what's going on.

CCMAIL:59652-done@bugs.kde.org


  M +28 -3     playlistsplitter.cpp   1.97


--- kdemultimedia/juk/playlistsplitter.cpp  #1.96:1.97
@@ -667,7 +667,24 @@ void PlaylistSplitter::slotChangePlaylis
     }
 
-    Playlist *current = m_dynamicList;
+    // Save the current dynamic list so that we can delete it when we're done
+    // showing the next list.  The two situations are that we're either showing
+    // an existing, non-dynamic list or that we're creating a dynamic list; in 
+    // both cases we want to get rid of the current one.
+    //
+    // If in fact the currently visible list *is not* a dynamic list, then
+    // m_dyanmicList will simply be zero, making deleting it at the end of this
+    // method just a no-op.
+    //
+    // And finally, because we will end up doing a recursive call to this method
+    // to show the dynamic playlist (second case calls the first case), we want
+    // to make sure that in that case we don't delete the very thing we're
+    // being asked to show.  (Hence the conditional assignment.)
+
+    Playlist *current = l.first() != m_dynamicList ? m_dynamicList : 0;
 
     m_nextPlaylistItem = 0;
+
+    // First case:  We're just showing one, currently existing list.
+
     if(l.count() == 1) {
         m_playlistStack->raiseWidget(l.first());
@@ -680,10 +697,18 @@ void PlaylistSplitter::slotChangePlaylis
         }
     }
+
+    // Second case: There are multiple playlists in our list, so we need to create
+    // a new "dynamic list" that is the union of these playlists.
+
     else {
         m_dynamicList = new DynamicPlaylist(l, m_playlistStack, i18n("Dynamic List"));
+
+        // Note that this call will end up making a recursive call to this
+        // method, but in that call since there will only be one list, it will
+        // take the "first case" above.
+        
         setupPlaylist(m_dynamicList, true, 0);
     }
 
-    if(current)
         delete current;