Changeset 8930


Ignore:
Timestamp:
Aug 14, 2009, 2:41:59 PM (13 years ago)
Author:
charles
Message:

(trunk libT) revision to r8910 for #2162: check to see if a field's value has actually changed before setting the "dirty" flag.

Location:
trunk/libtransmission
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/bandwidth.h

    r8889 r8930  
    152152 * @see tr_bandwidthGetDesiredSpeed
    153153 */
    154 static TR_INLINE void tr_bandwidthSetDesiredSpeed( tr_bandwidth        * bandwidth,
    155                                                 tr_direction          dir,
    156                                                 double                desiredSpeed )
    157 {
    158     bandwidth->band[dir].desiredSpeed = desiredSpeed;
     154static TR_INLINE tr_bool tr_bandwidthSetDesiredSpeed( tr_bandwidth        * bandwidth,
     155                                                      tr_direction          dir,
     156                                                      double                desiredSpeed )
     157{
     158    double * value = &bandwidth->band[dir].desiredSpeed;
     159    const tr_bool didChange = (int)(desiredSpeed*1024.0) != (int)(*value*1024.0);
     160    *value = desiredSpeed;
     161    return didChange;
    159162}
    160163
     
    173176 * @brief Set whether or not this bandwidth should throttle its peer-io's speeds
    174177 */
    175 static TR_INLINE void tr_bandwidthSetLimited( tr_bandwidth        * bandwidth,
    176                                               tr_direction          dir,
    177                                               tr_bool               isLimited )
    178 {
    179     bandwidth->band[dir].isLimited = isLimited;
     178static TR_INLINE tr_bool tr_bandwidthSetLimited( tr_bandwidth        * bandwidth,
     179                                                 tr_direction          dir,
     180                                                 tr_bool               isLimited )
     181{
     182    tr_bool * value = &bandwidth->band[dir].isLimited;
     183    const tr_bool didChange = isLimited != *value;
     184    *value = isLimited;
     185    return didChange;
    180186}
    181187
     
    239245 * in that particular case we want to ignore the global speed limit...
    240246 */
    241 static TR_INLINE void tr_bandwidthHonorParentLimits ( tr_bandwidth        * bandwidth,
    242                                                       tr_direction          direction,
    243                                                       tr_bool               isEnabled )
     247static TR_INLINE tr_bool tr_bandwidthHonorParentLimits ( tr_bandwidth        * bandwidth,
     248                                                         tr_direction          direction,
     249                                                         tr_bool               isEnabled )
     250{
     251    tr_bool * value = &bandwidth->band[direction].honorParentLimits;
     252    const tr_bool didChange = isEnabled != *value;
     253    *value = isEnabled;
     254    return didChange;
     255}
     256
     257static TR_INLINE tr_bool tr_bandwidthAreParentLimitsHonored( tr_bandwidth  * bandwidth,
     258                                                             tr_direction    direction )
    244259{
    245260    assert( tr_isBandwidth( bandwidth ) );
    246261    assert( tr_isDirection( direction ) );
    247262
    248     bandwidth->band[direction].honorParentLimits = isEnabled;
    249 }
    250 
    251 static TR_INLINE tr_bool tr_bandwidthAreParentLimitsHonored( tr_bandwidth  * bandwidth,
    252                                                              tr_direction    direction )
    253 {
    254     assert( tr_isBandwidth( bandwidth ) );
    255     assert( tr_isDirection( direction ) );
    256 
    257263    return bandwidth->band[direction].honorParentLimits;
    258264}
  • trunk/libtransmission/resume.c

    r8889 r8930  
    524524              uint64_t     fieldsToLoad )
    525525{
    526     int64_t      i;
     526    int64_t  i;
    527527    const char * str;
    528     uint64_t     fieldsLoaded = 0;
    529     char *       filename;
    530     tr_benc      top;
    531     tr_bool      boolVal;
     528    uint64_t fieldsLoaded = 0;
     529    char * filename;
     530    tr_benc top;
     531    tr_bool boolVal;
     532    const tr_bool  wasDirty = tor->isDirty;
    532533
    533534    filename = getResumeFilename( tor );
     
    642643    if( fieldsToLoad & TR_FR_RATIOLIMIT )
    643644        fieldsLoaded |= loadRatioLimits( &top, tor );
     645
     646    /* loading the resume file triggers of a lot of changes,
     647     * but none of them needs to trigger a re-saving of the
     648     * same resume information... */
     649    tor->isDirty = wasDirty;
    644650
    645651    tr_bencFree( &top );
  • trunk/libtransmission/torrent.c

    r8917 r8930  
    117117    assert( tr_isDirection( dir ) );
    118118
    119     tr_bandwidthSetDesiredSpeed( tor->bandwidth, dir, KiB_sec );
    120 
    121     tr_torrentSetDirty( tor );
     119    if( tr_bandwidthSetDesiredSpeed( tor->bandwidth, dir, KiB_sec ) )
     120        tr_torrentSetDirty( tor );
    122121}
    123122
     
    137136    assert( tr_isDirection( dir ) );
    138137
    139     tr_bandwidthSetLimited( tor->bandwidth, dir, do_use );
    140 
    141     tr_torrentSetDirty( tor );
     138    if( tr_bandwidthSetLimited( tor->bandwidth, dir, do_use ) )
     139        tr_torrentSetDirty( tor );
    142140}
    143141
     
    154152tr_torrentUseSessionLimits( tr_torrent * tor, tr_bool doUse )
    155153{
    156     assert( tr_isTorrent( tor ) );
    157 
    158     tr_bandwidthHonorParentLimits( tor->bandwidth, TR_UP, doUse );
    159     tr_bandwidthHonorParentLimits( tor->bandwidth, TR_DOWN, doUse );
    160 
    161     tr_torrentSetDirty( tor );
     154    tr_bool changed;
     155
     156    assert( tr_isTorrent( tor ) );
     157
     158    changed = tr_bandwidthHonorParentLimits( tor->bandwidth, TR_UP, doUse );
     159    changed |= tr_bandwidthHonorParentLimits( tor->bandwidth, TR_DOWN, doUse );
     160
     161    if( changed )
     162        tr_torrentSetDirty( tor );
    162163}
    163164
     
    180181    assert( mode==TR_RATIOLIMIT_GLOBAL || mode==TR_RATIOLIMIT_SINGLE || mode==TR_RATIOLIMIT_UNLIMITED  );
    181182
    182     tor->ratioLimitMode = mode;
    183     tor->needsSeedRatioCheck = TRUE;
    184 
    185     tr_torrentSetDirty( tor );
     183    if( mode != tor->ratioLimitMode )
     184    {
     185        tor->ratioLimitMode = mode;
     186        tor->needsSeedRatioCheck = TRUE;
     187
     188        tr_torrentSetDirty( tor );
     189    }
    186190}
    187191
     
    199203    assert( tr_isTorrent( tor ) );
    200204
    201     tor->desiredRatio = desiredRatio;
    202 
    203     tor->needsSeedRatioCheck = TRUE;
    204 
    205     tr_torrentSetDirty( tor );
     205    if( (int)(desiredRatio*100.0) != (int)(tor->desiredRatio*100.0) )
     206    {
     207        tor->desiredRatio = desiredRatio;
     208
     209        tor->needsSeedRatioCheck = TRUE;
     210
     211        tr_torrentSetDirty( tor );
     212    }
    206213}
    207214
     
    17921799    assert( tr_isPriority( priority ) );
    17931800
    1794     tor->bandwidth->priority = priority;
    1795 
    1796     tr_torrentSetDirty( tor );
     1801    if( tor->bandwidth->priority != priority )
     1802    {
     1803        tor->bandwidth->priority = priority;
     1804
     1805        tr_torrentSetDirty( tor );
     1806    }
    17971807}
    17981808
     
    20562066
    20572067void
    2058 tr_torrentSetActivityDate( tr_torrent * tor,
    2059                            time_t       t )
     2068tr_torrentSetActivityDate( tr_torrent * tor, time_t t )
    20602069{
    20612070    assert( tr_isTorrent( tor ) );
     
    20632072    tor->activityDate = t;
    20642073    tor->anyDate = MAX( tor->anyDate, tor->activityDate );
    2065     tr_torrentSetDirty( tor );
    20662074}
    20672075
Note: See TracChangeset for help on using the changeset viewer.