[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    branches/k3b/2.0
From:       Michal Malek <michalm () jabster ! pl>
Date:       2010-06-30 21:34:30
Message-ID: 20100630213430.DC9F7AC8E2 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1144809 by mmalek:

Fixed freeze on ripping Audio CD using external encoder.
It was caused by single kDebug() expression in the loop which was causing infinite \
loop when debug output was turned off. Fixed by using K3b::Process and its splitted \
                output functionality.
BUG: 236466


 M  +5 -0      ChangeLog  
 M  +11 -10    plugins/encoder/external/k3bexternalencoder.cpp  
 M  +1 -1      plugins/encoder/external/k3bexternalencoder.h  


--- branches/k3b/2.0/ChangeLog #1144808:1144809
@@ -1,3 +1,8 @@
+2.0.1
+=====
+Bugfixes:
+ * Freeze on ripping Audio CD using external encoder to MP3 or FLAC (236466)
+
 2.0
 ===
 Changes (since 1.0.5):
--- branches/k3b/2.0/plugins/encoder/external/k3bexternalencoder.cpp #1144808:1144809
@@ -18,11 +18,11 @@
 #include <config-k3b.h>
 
 #include "k3bcore.h"
+#include "k3bprocess.h"
 
 #include <KDebug>
 #include <KConfig>
 #include <KLocale>
-#include <KProcess>
 #include <KStandardDirs>
 
 #include <QFile>
@@ -72,7 +72,7 @@
 class K3bExternalEncoder::Private
 {
 public:
-    KProcess* process;
+    K3b::Process* process;
     QString fileName;
     K3b::Msf length;
 
@@ -181,15 +181,17 @@
             disconnect( d->process );
             d->process->deleteLater();
         }
-        d->process = new KProcess();
-        d->process->setOutputChannelMode( KProcess::MergedChannels );
+        d->process = new K3b::Process();
+        d->process->setSplitStdout( true );
         connect( d->process, SIGNAL(finished(int, QProcess::ExitStatus)),
                 this, SLOT(slotExternalProgramFinished(int, QProcess::ExitStatus)) \
                );
-        connect( d->process, SIGNAL(readyRead()),
-                this, SLOT(slotExternalProgramOutput()) );
+        connect( d->process, SIGNAL(stderrLine(QString)),
+                 this, SLOT(slotExternalProgramOutput(QString)) );
+        connect( d->process, SIGNAL(stdoutLine(QString)),
+                 this, SLOT(slotExternalProgramOutput(QString)) );
 
         d->process->setProgram( params );
-        d->process->start();
+        d->process->start( KProcess::SeparateChannels );
 
         if( d->process->waitForStarted() ) {
             if( d->cmd.writeWaveHeader )
@@ -291,10 +293,9 @@
 }
 
 
-void K3bExternalEncoder::slotExternalProgramOutput()
+void K3bExternalEncoder::slotExternalProgramOutput( const QString& line )
 {
-    while ( d->process->canReadLine() )
-        kDebug() << "(" << d->cmd.name << ") " << d->process->readLine();
+    kDebug() << "(" << d->cmd.name << ") " << line;
 }
 
 
--- branches/k3b/2.0/plugins/encoder/external/k3bexternalencoder.h #1144808:1144809
@@ -43,7 +43,7 @@
 
 private Q_SLOTS:
     void slotExternalProgramFinished( int, QProcess::ExitStatus );
-    void slotExternalProgramOutput();
+    void slotExternalProgramOutput( const QString& line );
 
 private:
     virtual bool initEncoderInternal( const QString& extension, const K3b::Msf& \
length, const MetaData& metaData );


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic