Changeset 14648
- Timestamp:
- Dec 31, 2015, 2:17:37 PM (7 years ago)
- Location:
- trunk/libtransmission
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libtransmission/announcer-udp.c
r14644 r14648 452 452 tau_tracker_free (struct tau_tracker * t) 453 453 { 454 assert (t->dns_request == NULL); 455 454 456 if (t->addr) 455 457 evutil_freeaddrinfo (t->addr); 456 if (t->dns_request != NULL)457 evdns_getaddrinfo_cancel (t->dns_request);458 458 tr_ptrArrayDestruct (&t->announces, (PtrArrayForeachFunc)tau_announce_request_free); 459 459 tr_ptrArrayDestruct (&t->scrapes, (PtrArrayForeachFunc)tau_scrape_request_free); … … 501 501 { 502 502 char * errmsg = tr_strdup_printf (_("DNS Lookup failed: %s"), 503 ev dns_err_to_string(errcode));503 evutil_gai_strerror (errcode)); 504 504 dbgmsg (tracker->key, "%s", errmsg); 505 505 tau_tracker_fail_all (tracker, false, false, errmsg); … … 655 655 { 656 656 return tr_ptrArrayEmpty (&tracker->announces) 657 && tr_ptrArrayEmpty (&tracker->scrapes); 657 && tr_ptrArrayEmpty (&tracker->scrapes) 658 && tracker->dns_request == NULL; 658 659 } 659 660 … … 662 663 { 663 664 const time_t now = tr_time (); 665 const bool closing = tracker->close_at != 0; 664 666 665 667 /* if the address info is too old, expire it */ 666 if (tracker->addr && (tracker->addr_expiration_time <= now)) {668 if (tracker->addr != NULL && (closing || tracker->addr_expiration_time <= now)) { 667 669 dbgmsg (tracker->host, "Expiring old DNS result"); 668 670 evutil_freeaddrinfo (tracker->addr); … … 675 677 676 678 /* if we don't have an address yet, try & get one now. */ 677 if (! tracker->addr && (tracker->dns_request == NULL))679 if (!closing && tracker->addr == NULL && tracker->dns_request == NULL) 678 680 { 679 681 struct evutil_addrinfo hints; … … 854 856 { 855 857 struct tau_tracker * tracker = tr_ptrArrayNth (&tau->trackers, i); 858 if (tracker->dns_request != NULL) 859 evdns_getaddrinfo_cancel (tracker->dns_request); 856 860 tracker->close_at = now + 3; 857 861 tau_tracker_upkeep (tracker); -
trunk/libtransmission/session.c
r14644 r14648 1782 1782 1783 1783 static void 1784 sessionCloseImpl (void * vsession)1784 sessionCloseImplStart (tr_session * session) 1785 1785 { 1786 1786 int i, n; 1787 1787 tr_torrent ** torrents; 1788 tr_session * session = vsession;1789 1790 assert (tr_isSession (session));1791 1788 1792 1789 session->isClosing = true; … … 1830 1827 tr_cacheFree (session->cache); 1831 1828 session->cache = NULL; 1832 1833 /* gotta keep udp running long enough to send out all 1834 the &event=stopped UDP tracker messages */ 1835 while (!tr_tracker_udp_is_idle (session)) 1836 { 1837 tr_tracker_udp_upkeep (session); 1838 tr_wait_msec (100); 1839 } 1840 1829 } 1830 1831 static void 1832 sessionCloseImplFinish (tr_session * session) 1833 { 1841 1834 /* we had to wait until UDP trackers were closed before closing these: */ 1842 1835 evdns_base_free (session->evdns_base, 0); … … 1853 1846 1854 1847 session->isClosed = true; 1848 } 1849 1850 static void 1851 sessionCloseImplWaitForIdleUdp (evutil_socket_t foo UNUSED, 1852 short bar UNUSED, 1853 void * vsession) 1854 { 1855 tr_session * session = vsession; 1856 1857 assert (tr_isSession (session)); 1858 1859 /* gotta keep udp running long enough to send out all 1860 the &event=stopped UDP tracker messages */ 1861 if (!tr_tracker_udp_is_idle (session)) 1862 { 1863 tr_tracker_udp_upkeep (session); 1864 tr_timerAdd (session->saveTimer, 0, 100000); 1865 return; 1866 } 1867 1868 sessionCloseImplFinish (session); 1869 } 1870 1871 static void 1872 sessionCloseImpl (void * vsession) 1873 { 1874 tr_session * session = vsession; 1875 1876 assert (tr_isSession (session)); 1877 1878 sessionCloseImplStart (session); 1879 1880 /* saveTimer is not used at this point, reusing for UDP shutdown wait */ 1881 assert (session->saveTimer == NULL); 1882 session->saveTimer = evtimer_new (session->event_base, sessionCloseImplWaitForIdleUdp, session); 1883 tr_timerAdd (session->saveTimer, 0, 0); 1855 1884 } 1856 1885 -
trunk/libtransmission/trevent.c
r14644 r14648 204 204 dbgmsg ("pipe eof reached... removing event listener"); 205 205 event_free (eh->pipeEvent); 206 tr_netCloseSocket (eh->fds[0]); 207 event_base_loopexit (eh->base, NULL); 206 208 break; 207 209 }
Note: See TracChangeset
for help on using the changeset viewer.