代码拉取完成,页面将自动刷新
同步操作将从 liexusong/bolt 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
/*
* Bolt - The Realtime Image Compress System
* Copyright (c) 2015 - 2016, Liexusong <280259971@qq.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <stdlib.h>
#include "bolt.h"
pthread_mutex_t bolt_gc_lock;
pthread_cond_t bolt_gc_cond;
void
bolt_gc_start()
{
pthread_mutex_lock(&bolt_gc_lock);
pthread_cond_signal(&bolt_gc_cond);
pthread_mutex_unlock(&bolt_gc_lock);
}
void *
bolt_gc_process(void *arg)
{
int freesize;
struct list_head *e, *n;
bolt_cache_t *cache;
for (;;) {
pthread_mutex_lock(&bolt_gc_lock);
while (service->total_mem_used < setting->max_cache) {
pthread_cond_wait(&bolt_gc_cond, &bolt_gc_lock);
}
pthread_mutex_unlock(&bolt_gc_lock);
freesize = service->total_mem_used -
(setting->max_cache * setting->gc_threshold / 100);
bolt_log(BOLT_LOG_DEBUG,
"GC starting and would be free %d bytes memory", freesize);
/* GC begin (Would be lock cache hashtable) */
pthread_mutex_lock(&service->cache_lock);
list_for_each_safe(e, n, &service->gc_lru) {
cache = list_entry(e, bolt_cache_t, link);
if (cache->refcount > 0) { /* This cache be connection using */
continue;
}
list_del(e); /* Remove from GC LRU queue */
/* Remove from cache hashtable */
jk_hash_remove(service->cache_htb,
cache->filename, cache->fnlen);
service->total_mem_used -= cache->size;
freesize -= cache->size;
free(cache->cache);
free(cache);
if (freesize <= 0) {
break;
}
}
pthread_mutex_unlock(&service->cache_lock);
}
}
int
bolt_init_gc()
{
pthread_t tid;
if (pthread_mutex_init(&bolt_gc_lock, NULL) == -1
|| pthread_cond_init(&bolt_gc_cond, NULL) == -1
|| pthread_create(&tid, NULL, bolt_gc_process, NULL) == -1)
{
bolt_log(BOLT_LOG_ERROR,
"Failed to initialize GC context");
return -1;
}
return 0;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。