diff options
author | Michael Cahill <michael.cahill@mongodb.com> | 2016-09-26 15:36:15 +1000 |
---|---|---|
committer | Alex Gorrod <alexander.gorrod@mongodb.com> | 2016-09-26 15:36:15 +1000 |
commit | 5fb852354745b9efe638183084ee00db821aa132 (patch) | |
tree | b5a19458b0a49252b4231f1660fc63553b439268 /src | |
parent | 7cc8f4bfbc5b45486e35072771c659e3c9e12ece (diff) | |
download | mongo-5fb852354745b9efe638183084ee00db821aa132.tar.gz |
WT-2928 Don't give up when the urgent queue is half empty. (#3063)
Diffstat (limited to 'src')
-rw-r--r-- | src/evict/evict_lru.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/evict/evict_lru.c b/src/evict/evict_lru.c index ad4f3ecc2b5..acc81f566a5 100644 --- a/src/evict/evict_lru.c +++ b/src/evict/evict_lru.c @@ -1579,13 +1579,12 @@ __evict_get_ref( if (is_server && (cache->evict_empty_score > WT_EVICT_SCORE_CUTOFF || __evict_queue_empty(cache->evict_fill_queue, false))) { - do { + while ((ret = __wt_spin_trylock( + session, &cache->evict_queue_lock)) == EBUSY) if ((!urgent_ok || __evict_queue_empty(urgent_queue, false)) && !__evict_queue_full(cache->evict_fill_queue)) return (WT_NOTFOUND); - } while ((ret = __wt_spin_trylock( - session, &cache->evict_queue_lock)) == EBUSY); WT_RET(ret); } else @@ -1621,7 +1620,8 @@ __evict_get_ref( */ for (;;) { /* Verify there are still pages available. */ - if (__evict_queue_empty(queue, is_server)) { + if (__evict_queue_empty( + queue, is_server && queue != urgent_queue)) { WT_STAT_CONN_INCR( session, cache_eviction_get_ref_empty2); return (WT_NOTFOUND); |