# HG changeset patch # User rosfran # Date 1171293748 0 # Node ID ce009d76ffb5f80c60764129f77fd731eece9ad9 # Parent f3b8627a51e45a9ec3941f388dfec5aaf0fe2246 [svn r356] Solved bug on read method callback. diff -r f3b8627a51e4 -r ce009d76ffb5 libgnomevfs2-mythtv/modules/mythtv-method.c --- a/libgnomevfs2-mythtv/modules/mythtv-method.c Mon Feb 12 14:52:45 2007 +0000 +++ b/libgnomevfs2-mythtv/modules/mythtv-method.c Mon Feb 12 15:22:28 2007 +0000 @@ -40,7 +40,9 @@ #define MYTHTV_VERSION_DEFAULT 30 #define MYTHTV_TRANSFER_MAX_WAITS 100 -#define MYTHTV_BUFFER_SIZE 1024*64 +#define MYTHTV_BUFFER_SIZE 1024*80 +#define MYTHTV_MAX_VFS_BUFFER_SIZE 4096 +#define MYTHTV_MAX_REQUEST_SIZE 1024*64 static GnomeVFSResult do_read (GnomeVFSMethod *method, GnomeVFSMethodHandle *method_handle, @@ -211,6 +213,8 @@ GnomeVFSFileSize bytes_to_read; *bytes_read = 0; + + g_debug ("XXXXXXXXXX Requested %llu bytes...\n", (guint64)num_bytes); if ( !myth_handle->is_livetv && ( myth_handle->bytes_read >= myth_handle->content_size ) ) return GNOME_VFS_ERROR_EOF; @@ -225,17 +229,23 @@ /* Loop sending the Myth File Transfer request: * Retry whilst authentication fails and we supply it. */ //if (myth_handle->buffer_remain < MYTHTV_BUFFER_SIZE) { - if ( ( myth_handle->buffer_remain = myth_handle->buffer->len ) < MYTHTV_BUFFER_SIZE ) { + if ( ( myth_handle->buffer_remain = myth_handle->buffer->len ) < MYTHTV_MAX_VFS_BUFFER_SIZE ) { + gint buffer_size = MYTHTV_BUFFER_SIZE - myth_handle->buffer_remain; + + /* resize buffer length request to no more than MYTHTV_MAX_REQUEST_SIZE */ + if ( buffer_size > MYTHTV_MAX_REQUEST_SIZE ) + buffer_size = MYTHTV_MAX_REQUEST_SIZE; + GByteArray *tmp_buffer = g_byte_array_new(); - printf ("XXXXXXXXXXXXXX Pedindo %d %d\n", MYTHTV_BUFFER_SIZE, myth_handle->buffer_remain); + g_debug ("XXXXXXXXXX Pedindo %d (restam apenas %d no buffer)\n", buffer_size, myth_handle->buffer_remain); gint len = gmyth_file_transfer_read (myth_handle->file_transfer, - tmp_buffer, MYTHTV_BUFFER_SIZE - myth_handle->buffer_remain, TRUE); + tmp_buffer, buffer_size, TRUE); if (!myth_handle->is_livetv && len < 0) { g_byte_array_free (tmp_buffer, TRUE); - g_print ("Fail to read bytes"); + g_debug ("Fail to read bytes"); return GNOME_VFS_ERROR_IO; } /*else if (len == 0) { g_byte_array_free (tmp_buffer, TRUE); @@ -248,9 +258,12 @@ myth_handle->buffer_remain += len; - g_byte_array_free (tmp_buffer, TRUE); - tmp_buffer = NULL; - } + if ( tmp_buffer != NULL ) + { + g_byte_array_free (tmp_buffer, TRUE); + tmp_buffer = NULL; + } + } /* if - got from the network, or not */ bytes_to_read = (bytes_to_read > myth_handle->buffer_remain) ? myth_handle->buffer_remain : bytes_to_read; /* gets the first buffer_size bytes from the byte array buffer variable */ @@ -276,7 +289,6 @@ MythtvHandle *myth_handle = (MythtvHandle *) method_handle; if (myth_handle->file_transfer != NULL) { - //gmyth_file_transfer_close (myth_handle->file_transfer); g_object_unref (myth_handle->file_transfer); myth_handle->file_transfer = NULL; }