Ticket #3427: verify-shortest-job-first-recover-bugfix.diff

File verify-shortest-job-first-recover-bugfix.diff, 2.4 KB (added by wateenellende, 12 years ago)

Added missing 'node->prev = l->prev;' (comment by sadface)

  • libtransmission/verify.c

     
    273273    return hasAny;
    274274}
    275275
     276static int
     277compareVerifyBySizeNow( const void * va,
     278                        const void * vb )
     279{
     280    const struct verify_node * a = va;
     281    const struct verify_node * b = vb;
     282
     283    return a->torrent->completion.sizeNow - b->torrent->completion.sizeNow;
     284}
     285
    276286void
    277287tr_verifyAdd( tr_torrent *      tor,
    278288              tr_verify_done_cb verify_done_cb )
     
    312322
    313323        tr_lockLock( getVerifyLock( ) );
    314324        tr_torrentSetVerifyState( tor, TR_VERIFY_WAIT );
    315         tr_list_append( &verifyList, node );
     325        tr_list_insert_sorted( &verifyList, node, compareVerifyBySizeNow );
    316326        if( verifyThread == NULL )
    317327            verifyThread = tr_threadNew( verifyThreadFunc, NULL );
    318328        tr_lockUnlock( getVerifyLock( ) );
    319329
  • libtransmission/list.c

     
    1010 * $Id$
    1111 */
    1212
     13#include <assert.h>
     14
    1315#include "transmission.h"
    1416#include "list.h"
    1517#include "utils.h"
    (this hunk was shorter than expected) 
    5860}
    5961
    6062void
     63tr_list_insert_sorted( tr_list            ** list,
     64                       void                * data,
     65                       TrListCompareFunc     compare )
     66{
     67    tr_list * l;
     68
     69    /* find l, the node that we'll insert this data before */
     70    for( l = *list; l != NULL; l = l->next )
     71        if( (compare)( data, l->data ) <= 0 )
     72            break;
     73
     74    if( l == NULL )
     75        tr_list_append( list, data );
     76    else if( l == *list )
     77        tr_list_prepend( list, data );
     78    else
     79    {
     80        tr_list * node = node_alloc( );
     81        node->data = data;
     82        node->next = l;
     83        node->prev = l->prev;
     84        assert(l->prev);
     85        node->prev->next = node;
     86        l->prev = node;
     87    }
     88}
     89
     90void
    6191tr_list_append( tr_list ** list,
    6292                void *     data )
    6393{
    6494
    65 -- libtransmission/list.h       (revision 11012)
     95++ libtransmission/list.h       (working copy)
     
    100100                       const void *      b,
    101101                       TrListCompareFunc compare_func );
    102102
     103/**
     104 * @brief Insert in an ordered list
     105 * @param list pointer to the list
     106 * @param item the item to be inserted
     107 * @param compare the comparison function.
     108 */
     109void
     110tr_list_insert_sorted( tr_list ** list,
     111                        void *     data,
     112                        TrListCompareFunc compare );
    103113
    104114/* @} */
    105115#endif /* TR_LIST_H */