fix write
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Wed, 27 Aug 2008 09:05:01 +0000 (09:05 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Wed, 27 Aug 2008 09:05:01 +0000 (09:05 +0000)
lib/base/console.cpp
lib/base/console.h

index c923da52ea6ef2d6b44f8013cbe4c2b50867ecc1..0a01094be3c153390623cd413591ede55696e159 100644 (file)
@@ -371,18 +371,17 @@ void eConsoleAppContainer::readyWrite(int what)
        if (what&eSocketNotifier::Write && outbuf.size() )
        {
                queue_data d = outbuf.front();
-               outbuf.pop();
-               if ( ::write( fd[1], d.data, d.len ) != d.len )
-               {
-                       /* emit */ dataSent(-1);
-//                     eDebug("writeError");
-               }
+               int wr = ::write( fd[1], d.data+d.dataSent, d.len-d.dataSent );
+               if (wr < 0)
+                       eDebug("eConsoleAppContainer write failed (%m)");
                else
+                       d.dataSent += wr;
+               if (d.dataSent == d.len)
                {
+                       outbuf.pop();
+                       delete [] d.data;
                        /* emit */ dataSent(0);
-//                     eDebug("write ok");
                }
-               delete [] d.data;
        }
        if ( !outbuf.size() )
                out->stop();
index 7c8076998041932f5fa02cbec2f9efa87846417b..3aa180e41675628fa5ccc8bfb1d32b2aa12e7ca7 100644 (file)
 struct queue_data
 {
        queue_data( char *data, int len )
-               :data(data), len(len)
+               :data(data), len(len), dataSent(0)
        {
        }
        char *data;
        int len;
+       int dataSent;
 };
 #endif