mirror of
https://github.com/transmission/transmission
synced 2024-12-26 01:27:28 +00:00
#5319 potential race condition when counting torrents
This commit is contained in:
parent
0a5024adc9
commit
9bbf4b3899
1 changed files with 6 additions and 5 deletions
|
@ -25,6 +25,7 @@
|
||||||
#import <IOKit/IOMessage.h>
|
#import <IOKit/IOMessage.h>
|
||||||
#import <IOKit/pwr_mgt/IOPMLib.h>
|
#import <IOKit/pwr_mgt/IOPMLib.h>
|
||||||
#import <Carbon/Carbon.h>
|
#import <Carbon/Carbon.h>
|
||||||
|
#import <libkern/OSAtomic.h>
|
||||||
|
|
||||||
#import "Controller.h"
|
#import "Controller.h"
|
||||||
#import "Torrent.h"
|
#import "Torrent.h"
|
||||||
|
@ -2352,7 +2353,7 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
|
||||||
if (!onLion)
|
if (!onLion)
|
||||||
selectedValuesSL = [fTableView selectedValues];
|
selectedValuesSL = [fTableView selectedValues];
|
||||||
|
|
||||||
__block NSUInteger active = 0, downloading = 0, seeding = 0, paused = 0;
|
__block int32_t active = 0, downloading = 0, seeding = 0, paused = 0;
|
||||||
NSString * filterType = [fDefaults stringForKey: @"Filter"];
|
NSString * filterType = [fDefaults stringForKey: @"Filter"];
|
||||||
BOOL filterActive = NO, filterDownload = NO, filterSeed = NO, filterPause = NO, filterStatus = YES;
|
BOOL filterActive = NO, filterDownload = NO, filterSeed = NO, filterPause = NO, filterStatus = YES;
|
||||||
if ([filterType isEqualToString: FILTER_ACTIVE])
|
if ([filterType isEqualToString: FILTER_ACTIVE])
|
||||||
|
@ -2381,24 +2382,24 @@ static void sleepCallback(void * controller, io_service_t y, natural_t messageTy
|
||||||
{
|
{
|
||||||
const BOOL isActive = ![torrent isStalled];
|
const BOOL isActive = ![torrent isStalled];
|
||||||
if (isActive)
|
if (isActive)
|
||||||
++active;
|
OSAtomicAdd32(1, &active);
|
||||||
|
|
||||||
if ([torrent isSeeding])
|
if ([torrent isSeeding])
|
||||||
{
|
{
|
||||||
++seeding;
|
OSAtomicAdd32(1, &seeding);
|
||||||
if (filterStatus && !((filterActive && isActive) || filterSeed))
|
if (filterStatus && !((filterActive && isActive) || filterSeed))
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
++downloading;
|
OSAtomicAdd32(1, &downloading);
|
||||||
if (filterStatus && !((filterActive && isActive) || filterDownload))
|
if (filterStatus && !((filterActive && isActive) || filterDownload))
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
++paused;
|
OSAtomicAdd32(1, &paused);
|
||||||
if (filterStatus && !filterPause)
|
if (filterStatus && !filterPause)
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue