@@ -109,14 +109,17 @@ bool BkDownload::download_done() {
109109 new_name = dir + " /" + COMMIT_FILE_NAME;
110110
111111 // verify sha256
112- auto th = photon::CURRENT ;
112+ photon::semaphore done ;
113113 std::string shares;
114- std::thread sha256_thread ([&, th ]() {
114+ std::thread sha256_thread ([&]() {
115115 shares = sha256sum (old_name.c_str ());
116- photon::thread_interrupt (th, EINTR );
116+ done. signal ( 1 );
117117 });
118118 sha256_thread.detach ();
119- photon::thread_usleep (-1UL );
119+ while (running == 1 ) {
120+ if (done.wait (1 , 200 * 1000 ) == 0 )
121+ break ;
122+ }
120123 if (shares != digest) {
121124 LOG_ERROR (" verify checksum ` failed (expect: `, got: `)" , old_name, digest, shares);
122125 force_download = true ; // force redownload next time
@@ -128,17 +131,17 @@ bool BkDownload::download_done() {
128131 LOG_ERROR (" rename(`,`), `:`" , old_name, new_name, errno, strerror (errno));
129132 return false ;
130133 }
131- LOG_INFO (" download done. rename(`,`) success" , old_name, new_name);
134+ LOG_INFO (" download verify done. rename(`,`) success" , old_name, new_name);
132135 return true ;
133136}
134137
135- bool BkDownload::download (int &running ) {
138+ bool BkDownload::download () {
136139 if (check_downloaded (dir)) {
137140 switch_to_local_file ();
138141 return true ;
139142 }
140143
141- if (download_blob (running )) {
144+ if (download_blob ()) {
142145 if (!download_done ())
143146 return false ;
144147 switch_to_local_file ();
@@ -149,7 +152,7 @@ bool BkDownload::download(int &running) {
149152
150153bool BkDownload::lock_file () {
151154 if (lock_files.find (dir) != lock_files.end ()) {
152- LOG_WARN (" failded to lock download path:`" , dir);
155+ LOG_WARN (" failed to lock download path:`" , dir);
153156 return false ;
154157 }
155158 lock_files.insert (dir);
@@ -160,7 +163,7 @@ void BkDownload::unlock_file() {
160163 lock_files.erase (dir);
161164}
162165
163- bool BkDownload::download_blob (int &running ) {
166+ bool BkDownload::download_blob () {
164167 std::string dl_file_path = dir + " /" + DOWNLOAD_TMP_NAME;
165168 try_cnt--;
166169 IFile *src = src_file;
@@ -231,6 +234,7 @@ bool BkDownload::download_blob(int &running) {
231234 }
232235 offset += count;
233236 }
237+ LOG_INFO (" download blob done. (`)" , dl_file_path);
234238 return true ;
235239}
236240
@@ -260,7 +264,7 @@ void bk_download_proc(std::list<BKDL::BkDownload *> &dl_list, uint64_t delay_sec
260264 continue ;
261265 }
262266
263- bool succ = dl_item->download (running );
267+ bool succ = dl_item->download ();
264268 dl_item->unlock_file ();
265269
266270 if (running != 1 ) {
@@ -287,7 +291,7 @@ void bk_download_proc(std::list<BKDL::BkDownload *> &dl_list, uint64_t delay_sec
287291 delete dl_item;
288292 }
289293 }
290- LOG_DEBUG (" BACKGROUND DOWNLOAD THREAD EXIT." );
294+ LOG_INFO (" BACKGROUND DOWNLOAD THREAD EXIT." );
291295}
292296
293297} // namespace BKDL
0 commit comments