mirror of
https://github.com/fangfufu/httpdirfs.git
synced 2024-09-27 20:51:55 +02:00
The background download thread is being spawned again.
This commit is contained in:
parent
6c8a15d8cc
commit
eb463478a8
20
src/cache.c
20
src/cache.c
@ -922,12 +922,12 @@ static void *Cache_bgdl(void *arg)
|
|||||||
uint8_t *recv_buf = calloc(cf->blksz, sizeof(uint8_t));
|
uint8_t *recv_buf = calloc(cf->blksz, sizeof(uint8_t));
|
||||||
fprintf(stderr, "Cache_bgdl(): thread %lu: ", pthread_self());
|
fprintf(stderr, "Cache_bgdl(): thread %lu: ", pthread_self());
|
||||||
long recv = path_download(cf->path, (char *) recv_buf, cf->blksz,
|
long recv = path_download(cf->path, (char *) recv_buf, cf->blksz,
|
||||||
cf->next_offset);
|
cf->next_dl_offset);
|
||||||
if ( (recv == cf->blksz) ||
|
if ( (recv == cf->blksz) ||
|
||||||
(cf->next_offset == (cf->content_length / cf->blksz * cf->blksz)) )
|
(cf->next_dl_offset == (cf->content_length / cf->blksz * cf->blksz)) )
|
||||||
{
|
{
|
||||||
Data_write(cf, recv_buf, recv, cf->next_offset);
|
Data_write(cf, recv_buf, recv, cf->next_dl_offset);
|
||||||
Seg_set(cf, cf->next_offset, 1);
|
Seg_set(cf, cf->next_dl_offset, 1);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Cache_bgdl(): received %ld, possible network error.\n", recv);
|
"Cache_bgdl(): received %ld, possible network error.\n", recv);
|
||||||
@ -1012,17 +1012,19 @@ long Cache_read(Cache *cf, char * const output_buf, const off_t len,
|
|||||||
/* -----------Download the next segment in background -------------------*/
|
/* -----------Download the next segment in background -------------------*/
|
||||||
bgdl:
|
bgdl:
|
||||||
;
|
;
|
||||||
off_t next_offset = round_div(offset_start, cf->blksz) * cf->blksz;
|
off_t next_dl_offset = round_div(offset_start, cf->blksz) * cf->blksz;
|
||||||
if ( (next_offset > dl_offset) &&
|
// printf("offset_start: %ld, next_dl_offset: %ld, dl_offset: %ld, next_seg_exists: %d, content_length :%ld\n",
|
||||||
!Seg_exist(cf, cf->next_offset) &&
|
// offset_start, next_dl_offset, dl_offset, Seg_exist(cf, next_dl_offset), cf->content_length);
|
||||||
cf->next_offset < cf->content_length ){
|
if ( (next_dl_offset > dl_offset) &&
|
||||||
|
!Seg_exist(cf, next_dl_offset) &&
|
||||||
|
cf->next_dl_offset < cf->content_length ){
|
||||||
/* Stop the spawning of multiple background pthreads */
|
/* Stop the spawning of multiple background pthreads */
|
||||||
if(!pthread_mutex_trylock(&cf->bgt_lock)) {
|
if(!pthread_mutex_trylock(&cf->bgt_lock)) {
|
||||||
#ifdef CACHE_LOCK_DEBUG
|
#ifdef CACHE_LOCK_DEBUG
|
||||||
fprintf(stderr, "Cache_read(): thread %lu: trylocked bgt_lock;\n",
|
fprintf(stderr, "Cache_read(): thread %lu: trylocked bgt_lock;\n",
|
||||||
pthread_self());
|
pthread_self());
|
||||||
#endif
|
#endif
|
||||||
cf->next_offset = next_offset;
|
cf->next_dl_offset = next_dl_offset;
|
||||||
if (pthread_create(&cf->bgt, NULL, Cache_bgdl, cf)) {
|
if (pthread_create(&cf->bgt, NULL, Cache_bgdl, cf)) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"Cache_read(): Error creating background download thread\n"
|
"Cache_read(): Error creating background download thread\n"
|
||||||
|
@ -62,7 +62,7 @@ struct Cache {
|
|||||||
/** \brief mutex attributes for bgt_lock */
|
/** \brief mutex attributes for bgt_lock */
|
||||||
pthread_mutexattr_t bgt_lock_attr;
|
pthread_mutexattr_t bgt_lock_attr;
|
||||||
/** \brief the offset of the next segment to be downloaded in background*/
|
/** \brief the offset of the next segment to be downloaded in background*/
|
||||||
off_t next_offset;
|
off_t next_dl_offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user