diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2006-04-17 14:15:36 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2006-04-17 14:15:36 +0000 |
| commit | dcc225a145aa784c85472e9618cd5fdf96a271b6 (patch) | |
| tree | 54459ad6e48e03a59e0ffc701b4fefdd144bff32 /src/main.cc | |
| parent | 28a82bfa4ad7a3b905f00d023f7be7096a2f75d4 (diff) | |
* src/TrackerInitCommand.cc (TrackerInitCommand): Added a "key"
parameter to a tracker request.
* src/TorrentMan.cc (readFileEntryFromMetaInfoFile): Bug fix.
* src/TrackerWatcherCommand.cc (execute): Call
req->resetTryCount().
* src/main.cc (setSignalHander): New function.
(main): Added a handler for SIGTERM.
(handler): Updated message.
(torrentHandler): Updated message.
Diffstat (limited to 'src/main.cc')
| -rw-r--r-- | src/main.cc | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/src/main.cc b/src/main.cc index 03d2e58f..69fab73a 100644 --- a/src/main.cc +++ b/src/main.cc @@ -71,6 +71,14 @@ void printDownloadAbortMessage() { printf(_("\nThe download was not complete because of errors. Check the log.\n")); } +void setSignalHander(int signal, void (*handler)(int)) { + struct sigaction sigact; + sigact.sa_handler = handler; + sigact.sa_flags = 0; + sigemptyset(&sigact.sa_mask); + sigaction(signal, &sigact, NULL); +} + void clearRequest(Request* req) { delete(req); } @@ -79,16 +87,19 @@ DownloadEngine* e; TorrentDownloadEngine* te; void handler(int signal) { - cout << _("\nSIGINT signal received.") << endl; + printf(_("\nstopping application...\n")); + fflush(stdout); e->segmentMan->save(); if(e->diskWriter != NULL) { e->diskWriter->closeFile(); } + printf("done\n"); exit(0); } void torrentHandler(int signal) { - cout << _("\nSIGINT signal received.") << endl; + printf(_("\nstopping application...\n")); + fflush(stdout); if(te->torrentMan->diskAdaptor != NULL) { te->torrentMan->diskAdaptor->closeFile(); } @@ -99,7 +110,7 @@ void torrentHandler(int signal) { } else { te->torrentMan->save(); } - + printf("done\n"); exit(0); } @@ -533,21 +544,14 @@ int main(int argc, char* argv[]) { SegmentSplitter* splitter = new SplitSlowestSegmentSplitter(); splitter->setMinSegmentSize(op->getAsLLInt(PREF_MIN_SEGMENT_SIZE)); - struct sigaction sigactIgn; - sigactIgn.sa_handler = SIG_IGN; - sigactIgn.sa_flags = 0; - sigemptyset(&sigactIgn.sa_mask); - sigaction(SIGPIPE, &sigactIgn, NULL); + setSignalHander(SIGPIPE, SIG_IGN); bool readyToTorrentMode = false; string downloadedTorrentFile; if(torrentFile.empty()) { - struct sigaction sigact; - sigact.sa_handler = handler; - sigact.sa_flags = 0; - sigemptyset(&sigact.sa_mask); - sigaction(SIGINT, &sigact, NULL); - + setSignalHander(SIGINT, handler); + setSignalHander(SIGTERM, handler); + splitter->logger = logger; e = new ConsoleDownloadEngine(); e->logger = logger; @@ -590,11 +594,9 @@ int main(int argc, char* argv[]) { if(!torrentFile.empty() || followTorrent && readyToTorrentMode) { try { //op->put(PREF_MAX_TRIES, "0"); - struct sigaction sigact; - sigact.sa_handler = torrentHandler; - sigact.sa_flags = 0; - sigemptyset(&sigact.sa_mask); - sigaction(SIGINT, &sigact, NULL); + setSignalHander(SIGINT, torrentHandler); + setSignalHander(SIGTERM, torrentHandler); + Request* req = new Request(); req->isTorrent = true; req->setTrackerEvent(Request::STARTED); |
