static void *in_notify(oop_source_t *oop, int fd, oop_event_t event, void *args) { char msg; struct info_queue_t *iq = (struct info_queue_t *)args; pthread_mutex_lock(&iq->mutex); while (read(fd, &msg, sizeof (char)) != -1) { if (msg == CMD_EXIT) { oop_remove_fd(oop, fd, OOP_READ); break; } else if (msg == CMD_DD) { struct dyndict_t *dd = (struct dyndict_t *)tq_get(&iq->tq); if (dd->stat == DD_ADD) add_dd(oop, dd); else if (dd->stat == DD_DEL) del_dd(oop, dd); } } pthread_mutex_unlock(&iq->mutex); return OOP_CONTINUE; }
void LogMonitor::AddDDInfo(std::string dd_name, std::string is_org, std::string is_p2p, std::string d_name, int piece_index, int subpiece_index, bool is_require, bool is_subpiece, bool is_http_subpiece) { if (dd_list.find(dd_name) == dd_list.end()) { boost::shared_ptr<DownloaderDriver> add_dd(new DownloaderDriver()); add_dd->d_list.clear(); dd_list.insert(std::make_pair(dd_name, add_dd)); AddDInfo(add_dd, is_org, is_p2p, d_name, piece_index, subpiece_index, is_require, is_subpiece, is_http_subpiece); } else { AddDInfo(dd_list[dd_name], is_org, is_p2p, d_name, piece_index, subpiece_index, is_require, is_subpiece, is_http_subpiece); } }