You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(2) |
Oct
(2) |
Nov
|
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(2) |
Feb
|
Mar
(2) |
Apr
(1) |
May
|
Jun
(1) |
Jul
(2) |
Aug
|
Sep
|
Oct
(1) |
Nov
(1) |
Dec
|
2003 |
Jan
|
Feb
(1) |
Mar
(1) |
Apr
|
May
(1) |
Jun
(1) |
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
(1) |
Dec
(1) |
2004 |
Jan
(3) |
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
(2) |
Dec
|
2005 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(3) |
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
2006 |
Jan
(1) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
(1) |
Dec
|
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2009 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2010 |
Jan
|
Feb
|
Mar
(2) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2011 |
Jan
|
Feb
|
Mar
(2) |
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
(3) |
2012 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(1) |
Dec
|
2013 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
(1) |
2014 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
|
2015 |
Jan
|
Feb
|
Mar
(1) |
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
(1) |
Dec
(2) |
2016 |
Jan
|
Feb
|
Mar
(2) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
(1) |
Dec
|
2017 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
2018 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(2) |
Nov
|
Dec
|
2020 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2022 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Raphael M. <Rap...@po...> - 2022-02-25 17:24:10
|
Hello Gnutella fans, Version 1.2.2 contains major bug fixes and you should upgrade immediately if you are currently running GTKG. # v 1.2.2 2022-02-25 [stable] This is a maintenance release with major bug fixes. There were several shortcomings with bandwidth management: capping was not performed correctly and could overuse uploading bandwidth. Also when the DHT is turned off or on, we need to recompute proper bandwidth stealing. Corruption of the DHT disk databases could also lead to a crash. There was a critical old bug in the Dynamic Querying layer that affected Ultrapeers mostly: we could corrupt memory and/or crash when the current node was removed and we were processing a Dynamic Query for that node. This is more likely to happen when running as an Ultrapeer but it could also affect nodes running as leaves, although the probability of that bug happening is much less in that case. Finally, it is best to not iterate on a global list that could get changed due to a node removal. This was the case when sending pongs to neighbouring nodes, so we now take a private copy. Improvements: - Extended "props" shell command with -e (exact) and -i (ignore missing). - The "props" command now takes a set of properties, handled as one batch. Bug Fixes: - Properly recompute bandwidth stealing on DHT changes. - Avoid crashing in D-Bus lib when filename is improperly UTF-8 encoded. - DHT: protect against corrupted database. - bw_available(): fix invalid logic for I/O source capping. - pong_all_neighbours_but_one(): iterate on local list. - dq_node_removed(): must free dq object asynchronously. Under the Hood: - Update IRC network information: moved from freenode to libera.chat - Chunk size limiting for uploads accounts for bandwidth. - Reduce memory footprint for statx_t if no data kept. - CQ: defer freeing of dispatched event. - watchdog: be more verbose within critical messages. - node_parse(): signal to callers when we have BYE-ed the node. - cq_event_called(): use better diagnostic on assert failure. - dbus_util_send_message(): protect against invalid text. - prepare_entry(): ensure entry invariant remains true. - wd_expire(): do nothing if watchdog was asleep. Cheers, Raphael |
From: Raphael M. <Rap...@po...> - 2020-07-09 12:07:57
|
Hello Gnutella fans, I have just released version 1.2.0, which contains important fixes and really needs to be installed to replace 1.1.15. Here's the ChangeLog entry for the release: # v 1.2.0 2020-06-14 [stable] This is an evolution release, hence the minor version bump. Several cases of bad input (from network) causing assertion failures were fixed. In particular, bad DHT response after a security token lookup or invalid G2 input streams were fatal. There was also a critical bug, originating from a harmful code typo, which led gtk-gnutella to serve unvailable file chunks from partial files, as if they were available, resulting in unintended download corruption on the remote end! Thanks to Laurent Gil's efforts, it is now possible to run gtk-gnutella from a Docker container. See https://github.com/angegar/gtk-gnutella-docker. Running within docker raised some issues about sbrk() and thread_self(), which were fixed. The computation of the build date was fixed, to avoid corner cases where gtk-gnutella would complain it was "old" when freshely compiled from up-to-date sources in a git tree whose "master" branch was only infrequently updated. The file selector was fixed, to avoid displaying grayed-out folders, a setup wich did not allow one to actually select directories in the preferences. Many improvements were done to allow smoother uploading for servents with more bandwidth than the recipients. Instead of drastically limiting upload bandwidth (which was negatively impacting everyone), we are now monitoring and adjusting our uploading speed to avoid congestion on the remote end. When stalling happens, we also react quickly to reduce the available bandwidth of the connection, not that of all connections to whom we are uploading. We also no longer rely on MaxMind GeoIP for providing the IP -> country mappings. Their distribution mode now requires a specific licence which seems totally incompatible with the gtk-gnutella's distribution mode. Instead, we are now using IP2Location, and the GEO_LICENCE file now lists the conditions under which these data are re-distributed (gtk-gnutella transforms the data into a form that it can digest, so we are distributing a modified, derived work, not the original). If you are still using a version of gtk-gnutella earlier than the 1.1.x series, you are strongly encouraged to upgrade. Starting from this release, we are now considering these versions too old to connect to. Improvements: - Let --compile-info show which malloc() is used. - It is now possible to run gtk-gnutella from a Docker container. - Added details in the README file about required packages to compile. - Use gradual bandwidth penalty when uploads are stalling. - Added upload bandwidth capping. - Forcefully reduce request chunk if b/w is limited. - Emit a Retry-After header on 416 replies. - On HTTP 416, emit a Last-Modified header. - Switched to IP2Location for mapping IPs to countries, dropping MaxMind GeoIP. - Upload tab now shows our own partial completion ratio, not just "(partial)". - Detect abuse from HTTP clients not reading payloads. - Enforce Retry-After softly. - Ban them when they abuse of the browse-host feature. - Smarter detection of duplicate incoming Gnutella connections. Bug Fixes: - [GTK2] Fixed file selector to avoid greyed-out folders. - [GTK2] Guarantee updating of properties when refresh button is clicked. - Added emergency path during startup should sbrk() fail. - Fixed instructions following build.sh run. - Fixed possible thread_self() instability at startup. - Fixed backward portability issue with the BFD library. - Fixed computation of build date. - Fix 2 harmful typos, affecting serving of partial files. - Regenrate Configure to fix gccversion usage bug. - Restored compilation of a standalone local shell. - Remove executable permissions on C source file! - Rename our ARC4 interface on systems with native arc4random(). - Updated all files to fix obsolete FSF postal address. - Avoid banning hosts issuing legitimate upload requests. - Implement GNU extension malloc_usable_size() when using our malloc(). - UHC: when hardwired list is exhausted, reload it. - Make Content-Range and Content-Length prioritary headers. - ban_allow(): was never returning BAN_FORCE. - download_reply(): reload available ranges after 416 if needed. - download_stop_switch(): forgot to remove passive queue indication. - gtk_gnutella_exit(): must close UPnP layer before HTTP. - http_send_status(): reworked to avoid undue header truncation. - node_g2_read(): fixed faulty assertion. - pb_token_found(): be more robust against unexpected input. - search_gui_close_search(): avoid crash when emptying search list twice. - update_available_ranges(): revisited range processing logic. - upload_416_extra(): was generating non-compliant headers. - vmm_dump_pmap_log(): fixed deadlock. - download_moved_with_bad_sha1(): always reset fileinfo. - file_info_reset(): also discard previous TTH info. Under the Hood: - Added temporary "xk" country code for Kosovo. - Added vmm_type_pointer() to determine region type. - Add lingering period for unreferenced file_descriptor objects. - Add shell command "show files -d" to list currently used file_descriptor. - Raise minimum b/w scheduling slot to 256 bytes per second. - Fixed HashGenericCat() in Jmakefile, leading to wrong .c dependency. - Fast assertions are a must for GTKG nowadays, always compile with them. - Do not post multiple randomness generation messages. - Split bit_generic routines into .ht and .ct. - Reserve file_object_close() for user code. - Made it possible to compile with TRACK_MALLOC again. - Improved "thread elements" shell command to trace callback function names. - Avoid VMM magazine allocation when running with TRACK_MALLOC. - Enhanced TRACK_MALLOC to be able to trap xalloc() as well. - Enhanced TRACK_MALLOC debugging power with MALLOC_CATCH_MALLOC. - Extended bool_to_string() to display value if not 0 or 1. - TEQ: optimize I/O events by posting them directly to I/O queue. - VMM pmap logging shows allocated size per fragment type. - Removed gone / probably gone logic for discovered threads. - Ensure thread_atexit() callbacks run in discovered threads. - Ensure walloc0() redirects to underlying zeroing routines, for statistics. - Simplified shell I/O condition management and logging. - Separate Gnutella and HTTP (upload) banning categories. - STATIC_ASSERT: use a more compact version for less verbose errors. - Made thread exit value read-only in thread_atexit() callbacks. - Emit thread mask in crash logs upon detected deadlock. - ADNS: the cache is now thread-safe and cached replies shuffled. - ADNS: added expiring periodic callback for cached DNS entries. - Added new "adns_debug" property for ADNS debugging. - Avoid g_memmove() which has been deprecated. - Added ripening_contains() and ripening_update() routines, not used yet. - Optimize ripening table when no value is kept. - Use aging table to track download mesh sending times. - Use 429 instead of 550 for "Too Many Requests". - Remind less often about banning status. - Let emulated alloca() cleanup when thread exits. - Ensure alloca_stack_direction_compute() is never inlined. - Smarter detection of duplicate incoming Gnet connections. - xmalloc: must "embed" xstrdup() and xstrndup(). - xmalloc: simplified allocation entry points. - xmalloc: ensure stricter memory alignment when xmalloc() replaces malloc(). - ban_delay(): fixed to return remaining ban time. - ban_force(): read incoming data before shutdown(). - ban_vendor(): GTKG earlier than version 1.1 deemed too old. - bitcmp(): use memcmp() for byte comparison. - bool_to_string(): added carp trace to help spot the culprit. - cq_cancel(): fix logic to return TRUE if event was NULL. - crash_deadlocked(): no longer dump stacks. - crash_handler(): enter thread crash mode before signal cleanup. - crash_time_internal(): use thread_safe_small_id() in raw mode. - download_queue_delay_switch(): explicitly turn off queuing if switching. - download_queue_v(): explicitely reset passive queuing info. - download_reply(): Content-Length not necessary if Content-Range. - download_send_push_request(): trace server GUID. - erbtree_foreach(): added cheap safety assertion. - evq_trampoline(): cleanup event if cannot signal thread. - extract_retry_after(): ensure amount in seconds is the only value. - fi_pick_rarest_chunk(): be smarter about selected chunk. - fi_pick_rarest_chunk(): ensure first free chunk is available. - hcache_fill_caught_array(): fix array fill logic. - http_send_status(): ensure generated header has trailing CRLF. - local_shell_mainloop(): must flag "writable" on POLLHUP. - mingw_exception_log(): use static variables and be more careful. - natpmp_handle_discovery_reply(): trace inconsistent replies. - natpmp_handle_mapping_reply(): trace inconsistent replies. - parq_upload_send_queue(): tie PARQ upload queue and upload. - pcache_pong_received(): also validate changing ports. - rand31: avoid race condition during intial seeding. - random_pool_append(): ensure no endless recursion, ever! - send_pproxy_error_v(): remove dead code. - shell_handle_event(): always write() when having pending data. - shell_handle_event(): on exception, setup EOF/shutdown. - shell_write_data(): make sure to flush as much as possible. - sig_compute_pc_index(): be paranoid about optimization. - signal_name(): contort to avoid gcc-10 warning. - signal_trap_with(): avoid kernel signal desynchronisation. - signal_uncaught(): dump stack trace if harmful signal. - sorted_array_lookup(): sort array if they forgot to do it! - spinlock_deadlocked(): capture lock status early. - stacktrace_atom_lookup_and_store(): trace race conditions. - stacktrace_load_symbols(): do nothing if too early. - thread_create_full(): keep async exit callback separated. - thread_deadlock_check(): disable locks when deadlock is certain. - thread_deadlock_check(): only dump stacks of involved threads. - thread_stack_check_overflow(): also log used stack size. - upload_remove_v(): create better logging message. - vmm_malloc_inited(): now only called internally. - xmalloc_show_settings_log(): trace chosen memory alignment. - zgc_zalloc(): transformed some assertions into verbose ones. Enjoy! Raphael |
From: Raphael M. <Rap...@po...> - 2018-10-07 07:21:22
|
Hello, It appears the OS/X file I had downloaded from the object store (file which is built by the Travis Continuous Integration) was corrupted. Or so have I been told on #gtk-gnutella. I have re-downloaded the file, which was different. Its SHA1 is now: 9fe726be2a0f15bd092eda18778b47d5ab5d48a1 gtk-gnutella-1.1.14.dmg I immediately deleted the previous file on Sourceforge, re-signed this binary and uploaded it along with its signature to Sourceforge. If you are on OS/X, please re-download that file and I appreciate if you could drop me a note to acknowledge whether this file works now or is still corrupted. Not having any OS/X platform myself means I am blind. ACK by e-mail or on #gtk-gnutella (irc.freenode.net) will be fine. Sorry about the trouble! Raphael |
From: Raphael M. <Rap...@po...> - 2018-10-05 01:23:54
|
Dear Gnutella fans, I have just released version 1.1.14. Here are the changes: # v 1.1.14 2018-10-04 [stable] This release mostly improves the core routines and fixes a few important bugs. Due to a bug in the usage of the RX buffers, we were not correctly parsing data returned in "chunked" transfer-encoding by HTTP/1.1 servers. This affected the UPnP logic. The UPnP port unmapping done when the program shuts down was also not being able to complete successfully because we were preventing the HTTP connection from going on during the shutdown. Not critical because there is a lifetime attached to all mappings, but always best to properly clean-up when leaving. The algorithm used to pick random chunks to download was also revisited to ensure a uniform selection within the whole file ranges that remain to be fetched. At startup time, the DHT code no longer expires keys when reloading data. This could create crashes during the operation, with no other remedy than to erase all the DHT database files manually to be able to recover! The background task layer was also causing crashes (at exit time though) because it was not recording whether it was running "user" code as opposed to "kernel" code. The SDBM code was also improved to allow concurrency and, in particular, a "loose" iteration scheme which does not need to grab the database lock during the whole iteration process. It is also possible to perform a concurrent database rebuilding. The thread runtime now has an improved deadlock detection engine, based on a topological sort, that can definitely tell whether we are deadlocked. When the deadlock is detected, we can also have more information about the threads participating in that deadlock condition, to assist debugging. On Windows, a bug in our mingw_dlerror() emulation caused it to always fail once an error had been recorded, leading to un-decorated subsequent stack traces, which really do not help on that platform! There was also a concurrency bug in the processing of network queries. Every time the library was rescanned, it could trigger a crash due to a memory zone being declared private and was in fact shared between threads. The crash occurred only when a query was received on the Gnutella network whilst the library was rescanned. The semi-reliable UDP layer TX side was revisited to maximize chances that reliable messages get through completely. The pattern matching code was revisited thoroughly. A new algorithm (2-Way String Matching) now complements the Quick Search algorithm and an initial benchmarking is done to compare our own matching routines with native libc versions of strstr(), strlen(), strchr() and memchr(). The fastest routine is then selected, to ensure optimal performances. There is also a unit-test program ensuring proper semantics for the pattern search flags. New Features: - Added UDP scheduler message statistics by priority. Improvements: - [GTK2] Catch column resize events to persist widths quickly. - Added "shutdown -x" to stop the program and continue session next time. - Added --resume-session option to request explicit continuation. - Improved pattern matching with new algorithm and runtime benchmarking. - Persist current_peermode to restart in same mode after crash. - Record compilation date and time for the crashlog. - When running with no GUI, relax mem requirements to become ultra. - Use minimum download chunk size to align requested download offsets. - Added statistics for OOB hit notifications we process. - Extensive improvements of the SDBM code to allow concurrency. - Semi-reliable UDP TX layer now sends messages more aggressively. - Reduce memory footprint of compiled patterns for short patterns. Bug Fixes: - No longer supply -lgthread-2.0 and -lresolv at link time. - DHT: do not expire keys when reloading data at startup. - Restored alphabetical listing of command options in the man page. - The --use-poll argument was not mentioned in the manual page. - UPnP: fixed XML logging. - UPnP: was not correctly unmapping ports on servent shutdown. - crash_time_internal(): protect against recursions in raw mode. - file_info_retrieve(): must restore proper mtime for seeded files! - filter_apply(): fixed suffix matching to allow whole match. - http_data_ind(): could not process chunked data! - iov_contiguous_size(): fixed destructive implementation. - pslist_last_count(): fixed off-by-one error. - recursive_scan_step_build_partial_table(): removed assertion. - statx_opx(): use fabs() on double. - word_vec_init(): zone cannot be private. - zgc_subzone_defragment(): fixed improper assertion. Under the Hood: - Added hidden --no-build-version option. - Added cstr_{b,f,l}cpy() routines to supplant g_strlcpy() - Added strpcpy() which returns pointer to last copied trailing NUL. - Added vmm_move() to move allocated VM regions to better places. - Added G_FALL_THROUGH and fixed fall-through in switch cases. - Added assertions in embedded lists for insertions / removals. - Added new _mark_removed() and _link_mark_removed() for lists. - Added is_ascii_ident() to check "\w" (word) in ASCII. - Added ULONG_SWAP(). - Added op_roundup() and op_ptr_roundup() to round to upper aligned boundary. - Added stats datapoint iterators and ability to remove outliers. - Added G_FAST and G_NO_OPTIMIZE compilation directives. - Added support for case-insensitive pattern matching. - Added zone_info() to request zone allocation stats. - Added p[s]list_shift_data() to remove head when NULL is valid data. - Attempt relocation of hash tables arenas once in a while. - Always capture and display the routine name in assertions. - Disable parallel make execution in src/if. - Fixed indentation for "if" and "else" leading to gcc 7.x warnings. - Fixed logging fast assertion macros to allow just one string. - Declare property choices[] array static and const! - Optimize h_strnjoinv() with new strpcpy(). - Optimize memory for the gnet property init_list[]. - Optimized ctz64() to make it more obvious. - Protect events and subscribers with magic tags. - Removed http_buffer_t, completely obsoleted by pmsg_t. - Show zalloc settings at startup and in "memory show options". - Simplify code for read-lock upgrading and releasing. - Strings now hold persistent "truncated" flags, for formatting. - The watcher layer now auto-initializes. - Use the Mersenne Twister as an additional random source. - Use s_carp() instead of s_warning() for reporting "deep" important warnings. - Use new vstrstr(), vstrlen(), vmemchr() and vstrchr() for optimized runtime. - Windows: added ftruncate() emulation. - Windows: fixed stat() and fstat(), with proper st_dev and st_ino fields. - enamed hash_table_size() as hash_table_count() for consistency. - When log messages are truncated, signal it visually with trailing "+++". - VMM: use smarter core allocation under long-term strategy. - anti_window_shift_hack(): hide normal output if not debugging. - compat_longjmp(): record usage location and trace duplicate use. - crash_invoke_inspector(): do not hardwire parent stdout / stderr. - crash_restart(): always log the given message. - crash_setcctime(): avoid using "time" as parameter name. - crash_vmea_usage(): trace calling routine. - entropy_seed(): also initialize random "previous entropy". - fi_pick_chunk(): fixed selection of first chunk. - fi_pick_chunk(): revisited random chunk selection algorithm. - file_object_find(): loudly warn on file mismatch. - get_iconv_charset_alias(): do not copy trailing ' ' in charset name. - halloc_dump_stats_log(): was not logging realloc_via_xprealloc. - hrealloc(): use vmm_move() and attempt to optimize VM space. - log_handler(): emit stacktrace for glib, GTK or Pango warnings. - mingw_dladdr(): use win32 DLP layer to check for new libraries. - mingw_dlerror(): fixed to follow POSIX semantics. - mingw_fix_stat(): trap ERROR_NOT_READY errors correctly. - node_timer(): periodically try to move QRT arenas in VM space. - parse.h: remove NON_NULL_PARAM() on function with assertions. - rwlock_upgrade_from(): must only count read-locks from current thread. - s_logv(): default log message max length raised to 3500 bytes. - search_oob_pending_results(): randomly discard hits if too many. - search_request_preprocess(): warn if TCP query contains a "QK". - sequence_backward_iterator(): fixed case of one-way lists. - stacktrace_pretty_filepath(): move to latest /src/. - str_chr(): optimized to use vstrchr() if we can NUL-terminate. - str_destroy(): ensure we do not call on a thread-private string. - str_s2c(), str_2c(), str_dup(): handle already NUL-terminated strings. - str_s2c(): ensure we do not call on a thread-private string. - thread_suspend_others(): skip threads not marked as "valid". - timestamp: be paranoid and protect against invalid time_t inputs. - vmea_capacity(): changed semantics to report initial capacity. - vmm_mmap_anonymous(): identify foreign regions more quickly. - word_vec_make(): simplified code a bit. - wrealloc(): if size does not change, attempt a wmove(). - xallocate(): be more aggressive when forcing VMM allocation. - xmalloc: allocate via standalone VMM regions if possible. - xmalloc: revisited plain VMM block allocation and freeing. - xmalloc: use checksums to validate chunk headers. - xreallocate(): ensure VMM space improves when reallocating. - zcreate(): flag created zones as "user" ones. - zgc(): only run for long-lived processes. Enjoy! Raphael |
From: Raphael M. <Rap...@po...> - 2017-10-27 17:43:12
|
Dear Gnutella fans, Release 1.1.13 has just been pushed out to Sourceforge. You can safely move to 1.1.11 to 1.1.13. Release 1.1.12 was an accident. :-) Here is the Changelog entry for 1.1.13 and 1.1.12: # v 1.1.13 2017-10-22 [stable] This release primarily addresses issues that were left-over in 1.1.12. Do not use that previous release, migrate from 1.1.11 to 1.1.13 directly! The main issue was that of Partial File Sharing. Numerous bugs, dating from 7 years or more, were lurking because my local configuration had switched PFS off for testing, and it had never been turned back on! In particular, completed files were not properly shared, it was not possible to upload their THEX since it was not recomputed, and the files were not properly indexed in the Query Routing Table due to bugs in the background task layer. In case of a crash, we now dump the value of all the Gnutella properties to be able to spot configurations that deviate from the norm. Too many bugs were reported and ignored because they could not be reproduced, often due to not having the same setup when attempting to debug! Another nasty bug was fixed: it was not possible to change the IP support configuration without causing an immediate crash. The reason is due to a change that was integrated in 1.1.12 to allow IPv6 UDP traffic from G2 nodes. The problem was that this created an extra client stack on top of the low-level UDP traffic scheduler and it was not properly cleaned-up when switching IP configurations, leading to an assertion failure! New Features: Improvements: - Append all Gnutella properties to the crashlog file. - At startup, do not needlessly request TTH if we have it cached already. - Optimized requests for library scan / QRP rebuild, avoiding multiple events. - Allow TTH computation for seeded files. - Obsolete and stale entries are now removed from the SHA1 cache. - [GTK] Added GUI events on more fileinfo changes. - [GTK] Show information about recomputed TTH for seeded files. - Prune unshared entries from SHA1 cache at startup. - Persist information about seeded files in the ASCII fileinfo database. - Remove unneeded libraries from the default GTK2 ldflags. Bug Fixes: - Was not able to properly seed completed files; fixed shared_file_path(). - Was not always updating QRP on the UP side after a library change. - Could have background tasks stuck after cancelling a multi-ref'ed one. - Dynamic querying timeout was not properly computed (made too small). - Changing from "IPv6 & IPv4" to "IPv4 only" mode caused a crash. - Restored ability for "shutdown -r" to work. Under the Hood: - Added prop_to_typed_string(). - Added s_where() to log a stacktrace on stderr only. - Added tt_slice_size() to compute slice length per leaf in the TTH. - New crash_dumper_add() to register crash dumper callbacks. - No panicing when thread cannot block but was actually suspended. - Was unduly offsetting stacktrace by one extra level. - bg_sched_sleep(): don't reduce runcount on exiting task! - bg_sched_timer(): added run count consistency check. - bg_sched_timer(): fixed logging of task's run time. - bg_task_cancel(): log task address as well, not just the task name. - bg_task_wakeup(): must clear user sleeping flag. - crash_restart_notify(): use smarter crash_exit(). - crash_try_reexec(): suspend other threads as a precaution. - deflate_flushed(): suppressed soft assertion. - dq_results_expired(): fixed improper timeout computation. - fi_free(): cut any pending reference by uploads! - fi_tigertree_check(): more verbose in case of errors. - file_info_moved(): must update fi->modified as well. - file_info_remove_source(): removed unused discard parameter. - file_info_retrieve(): also validate that DONE is consistent. - file_info_shared_sha1(): do not share bad files. - get_file_to_upload_from_urn(): factorized code. - huge_update_hashes(): enforce one sync of SHA1 cache every minute. - huge_verify_callback(): use shared_file_indexed(). - node_udp_disable(): was not disabling the G2 UDP IPv6 node. - parse_and_append_cache_entry(): discard obsolete / stale entries. - qrt_compressed(): fixed outdated comments. - qrt_diff_1(): was never considering change. - request_sha1(): don't request TTH if we have it cached. - shared_file_fileinfo_unref(): clear fileinfo pointer. - shared_file_from_fileinfo(): copy TTH atom as well, if any. - shared_file_is_shareable(): be stricter for partial files. - shared_file_path(): must process sf->fi correctly! - upload_file_present(): loudly warn when completed file changed on disk. - upload_file_present(): loudly warn when file not shareable. - verify_update(): loudly warn when "progress" callback stops processing. # v 1.1.12 2017-09-20 [stable] This release fixes a very critical bug that was only manifesting when Partial File Sharing was turned on, and which caused possible memory corruption (leading to a sure crash later) when enqueuing new files for downloading. New Features: - Throttle browsing requests to one per hour from a given IP. - Limit uploads to stalling hosts to 1, regardless of user settings. - [GTK2] Show proper average data speed on completed uploads. Improvements: - Added "WSHR" vendor code for WireShare. - Added "ENVY" vendor code for Envy. - Do not attempt costly operations after a crash / auto-restart. - Updated FAQ -Uploads and Sharing- - Use 64-bit variables for bandwidth computations. - Make sure early stalling is not always reported for the same IP. - Use even HTTP outgoing bandwidth as the last measure when stalling. Bug Fixes: - Allow IPv6 UDP traffic from G2 nodes. - Be sure to use destructive list iteration with tmalloc_free_magazine(). - Critical upload HTTP statuses are now fully sent. - Must give plain (untranslated) strings to send_upload_error(). - bg_task_finished(): now calls safer bg_task_dead(). - file_object_open_from(): also catch EROFS when opening file. - node_bye_v(): do not call node_remove_v() for G2 nodes. - vendor_code_get_name(): fixed validation of unknown code tokens. - verify_next_file(): fixed wrong argument order in log message. Under the Hood: - bfd_util: reworked mutex grabbing in an attempt to avoid deadlocks. - binary_hash(): disperse bits in initial hash value. - check_for_events(): optimize path if timeout is 0 or we collect events. - cq_event_called(): only zero variable holding event when asked! - cq_zero(): now always nullify the event, as the name suggests. - crash_setmain(): avoid spurious warnings with recent gcc. - english_strerror() and symbolic_errno() made thread-safe. - inputevt_timer(): factorized common code into new inputevt_handle(). - socket_udp_flush_queue(): do not process anything if we cannot devote time. - stack_sym_trylock(): avoid deadly recursions through stack lock dumping! - thread_sig_handle(): use atomic exchange operation to clear pending set. - u32_ptr_hash(): discard lower bits of the multiplication as well. - upload_timer(): clear the stall flag when it is over. - Added aging_record() to simplify code for plain keys. - Added cq_event() to acknowledge reception of events we do not track. - Added "inputevt_trace" property for tracing dispatched I/O callbacks. - Added english_strerror() to guarantee English messages. - Added thread_signal_has_pending() and thread_signal_process(). - Added "lock_sleep_trace" and "lock_contention_trace" properties. - AJE: changed pool #0 filling policy and reseeding checks. - Ensure misc_init() is called before using lookup tables. - Simplify is_ascii_*() by performing table lookup. - Thread runtime now allows a signal handler to run within another one. - Updated UHC list, fixed obsolete port numbers. - Use new cq_event() in thread callout events to avoid possible leaks. - Watchdog: revisited logic to do more under lock protection. Enjoy! Raphael |
From: Raphael M. <Rap...@po...> - 2016-11-11 17:17:22
|
Dear Gnutella fans, Release 1.1.11 has just been pushed out to Sourceforge. Here is the Changelog entry: # v 1.1.11 2016-11-11 [stable] This release fixes a portability issue on FreeBSD and introduces a main core feature and minor new GUI features. The main feature is the additiona of "equivalence classes" defining word aliases, used when sharing files and querying for them. Currently, the only supported equivalence class deals with naming of series. Indeed, there are various conventions that can be used to represent these, and it makes searching inefficient: either one will lookup for all the possible variations, or one will miss some of the files. For instance, episode #8 of an hypothetical season #4 can be represented by any of these strings: { "s04e08", "4x08", "408", "04x08", "0408" } Thanks to the equivalence class, a file bearing one of these strings can be searched for (and located successfully) by using any of the other strings. Of course, since this is a local processing, the more servents out there are deployed with this aliasing support, the more efficient the feature becomes! There are also new GUI features: the "Clear completed" button from the Download pane is now doing someething useful, and the current page of different notebooks is remembered across sessions. The only one which is not restored on normal resuming is the main notebook tab. It will be restored if GTKG is restarted after a crash, but otherwise the application will always start up within the Network tab. In the Uploads tab, upload requests coming from a G2 servent will not be flagged with a "[G2]" tab right after the IP address. This helps seeing how the Gnutella and G2 network unification is evolving. New Features: - Flag uploads coming from G2 servents with a "[G2]" tag after IP address. - Added alias support in sharing/querying. - Made the "Clear completed" button in Downloads/Tools do something useful. - Moved "Clear completed" button to the bottom right of the download pane. - Remember fileinfo notebook tab number across sessions. - Remember main notebook tab number across sessions, only restored after crash. - Remember Gnet stats notebook tab number across sessions. - Remember download info / tools notebook tab number across sessions. Improvements: - Added --cleanup to explicitly request for final memory cleanup sequence. - Updated Italian translation. - Updated GeoIP databases. Bug Fixes: - Leaf nodes could end-up being connected to more ultrapeers than configured. - Fixed monitoring of alien threads, important when GTK file selector is used. Under the Hood: - Debian compatibility level changed from 4 to 5. - Make sure we can deal with older pkg-config, which needs leading arguments. - Use "embedded" symbols for xmalloc(), xfree() and friends. - Added "query_trace" property to trace all queries which were searched. - Moved halloc-based string functions like h_strdup() to dedicated hstrfn.c. - Expanded search mask to 64 bits to be able to hold all digits and letters. - Count aliased queries and hits from aliases. - Pre-compute shared file media type at record creation time. - Pass query limits to st_search() to avoid needless pattern matching. - Added h_strsplit() and h_strsplit_set(). - Added strvec_append_with() to expand vector by appending another vector. - crash_assert_logv(): don't call crash_mode() if assert failure was recorded. - entropy_clock_time(): mix the entropy nonce through hashing for more diffusion. - node_can_accept_connection(): only send headers back when handshaking. - qrp_add_file(): optimized to avoid computing word length if not required. - thread_stack_check_overflow(): ignore virtual addresses outside stack range. - vmm_init_once(): ensure any shared library for stacktrace unwinding is loaded. Enjoy! Raphael |
From: Raphael M. <Rap...@po...> - 2016-09-02 09:19:23
|
Dear Gnutella fans, Release 1.1.10 has just been pushed out to Sourceforge. Here is the Changelog entry: # v 1.1.10 2016-09-01 [stable] This is mostly a bug-fixing release and should be the last update on the 1.1.x release tree, before important core changes in the upcoming 1.2. Improvements: - FAQ cleanups. - Added the ".ape" file extension to the default list of shared files. - Remember hosts to which a TCP connection failed recently to avoid hammering. - Updated French and Turkish translations. - Updated GeoIP databases. Bug Fixes: - Don't embed build date if SOURCE_DATE_EPOCH is set for reproducibile builds. - Missed ":" in variable substitution request, in scripts/nm-list - nm-list: fixed date computation on BSD systems. Under the Hood: - Need TLS 2.12 to generate an X.509 self-signed certificate. - Added G_PRINTF() hint to tls_logfmt() and tls_cert_log() to avoid warnings. - Fixed CPP file inclusion protection symbol for lib/mime_type.h. - Added the "ape" MIME type linked to the ".ape" file extension. - Ensure we do not suspend threads during an interrupt. - Track where context was taken in our setjmp wrappers to ease debugging. - Keep track of "once" initializations in case we end-up recursing. - Trace which new lock is overflowing the lock stack. - once: make sure we can insert routine in our tracking table. - once: arbitrarily limit nesting level in one thread to 32. - dht_update_size_estimate(): return if our KUID was not initialized yet. - keys_reclaim(): we can have values attached to key if we can remove it. - symbols_load_from(): must release write lock when falling back to pre-computed. - thread_element_block_until(): was not checking for concurrent unblocking. - thread_element_block_until(): revisited signal handling. - thread_suspend_others(): don't wait for busy threads already marked suspended. - walloc: prevent race condition on walloc_stopped being set. Enjoy! Raphael |
From: Raphael M. <Rap...@po...> - 2016-03-30 21:44:33
|
Dear Gnutella fans, I have just released gtk-gnutella 1.1.4, with the following changes: # v 1.1.4 2015-09-09 [stable] This release is mostly a bug-fixing release. One major bug (leading to crash) was found in the G2 frame parsing layer: a carefully crafter G2 packet sent to GTKG could crash it, leading to a Denial of Service. For that reason, an upgrade to 1.1.4 is strongly recommended. The only major new feature is the added cleanups of the TTH cache and the crash log directory to make sure we do not keep useless files on the disk forever. Because the Phex servent is no longer maintained, there is now a workaround for that particular servent to ensure it can correctly download from GTKG. Improvements: - [GTK2] Added tri-state column sorting in "property editor" preference pane. - [GTK2] Show icon + warning message when we have no TCP listening socket. - Added an "install-strip" target to all Makefiles to install with stripping. - Can no longer edit properties flagged as "internal" through shell or GUI. - Added new "session_start_stamp" property to hold the true starting time. - Added support for TTH cache cleanup. - Added automatic cleanup of the crash log directory. - New shell command "random stats" to display the statistics on random layer. - Workaround for Phex: always send X-Gnutella-Content-URN in upload replies. - Updated GeoIP database. Bug Fixes: - upnp_natpmp_discovered(): detect when UPnP layer was shutdown and abort. - Fixed bad definition of XXTEA key, which led us to use only its first 4 bytes. - node_g2_read(): need to only read 3 bytes usually to determine frame length. - thread_sp(): tweaked to defeat gcc 5.x optimization leading to a NULL return. - File moving: notify main thread as soon as file is completely copied. - update_available_ranges(): lack of X-Available means file is full on server. Under the Hood: - Windows: added getppid() and statvfs() emulation, plus rmdir() support. - Improved the unpredictability of our random numbers. - Loudly warn if attempting a file-descriptor operation on a revoked descriptor. - Added compat_sendfile() with fallback to emulated version when necessary. - Added compat_statvfs() for portability and code simplification. - File moving operations now use sendfile() if available. - XFMT: made it loudly clear that comment nodes are ignored for now. - VMM: when debugging, trace large allocation spots. - VMM: raised maximum page cache lifetime from 3 to 15 minutes. - page_cache_find_pages(): treat user memory as if under short-term strategy. - filepath_basename(): optimize code when G_DIR_SEPARATOR is '/'. - Optimized CMP() to avoid branching regardless of the arguments. - Added ftw_foreach() to traverse a file system and process each entry. - mingw_readdir(): do not change errno if it was left untouched by _wreaddir(). - Let mingw_{opendir,readdir,closedir} use normal types, not generic ones. - mingw_stat(): added workaround for trailing "/" or "/." in paths. - etree_traverse_internal(): minor optimization to avoid trailing +1 each time. - Added etree_sort() and etree_sort_with_data() to sort children of all nodes. - Changed signature of decoding base16 and base32 routines. - Regenerated Configure to fix the fdopendir() compile test. - Make sure pointer hashing distributes its trailing bits evenly. - elist_merge_sort(): don't update tail, just do one single pass at the end. - vmm_dump_pmap_log(): copy pmap data, then process dumping without locks. Enjoy! Raphael |
From: Raphael M. <Rap...@po...> - 2016-03-06 11:37:52
|
Dear Gnutella fans, Release 1.1.9 has just been pushed out to Sourceforge. Here is the Changelog entry: # v 1.1.9 2016-03-06 [stable] This is mostly a bug-fixing release. It fixes an important bug in the UPnP discovery path that led to a crash when it found more than one UPnP device on the network. It also introduces a new Glossary that can be displayed to explain some terms that may be hard to understand for newcomers, so that they may in turn benefit from the tooltips and the information in the FAQ. On Windows, one important change is that we now force all memory allocations from the external DLLs to use our own malloc() implementation. This proves that one of the DLLs is exhibiting a memory leak. Plugging that leak will unfortunately require that a garbage collector be implemented. Measurements indicate that 4K leak every second on average, which eventually leads to an out-of-memory crash after a few days (2 to 3), preventing high uptimes on Windows. The leak is not originating from gtk-gnutella's code. Improvements: - [GTK2] Added menu to display the new glossary window. Bug Fixes: - Define PTHREAD_STACK_MIN to 0 in case it is not supplied by <pthread.h>. - can_become_ultra(): don't account for upload fds if no upload will take place. - compat_sleep_ms(): fixed the fallback implementation using compat_poll(). - dht_route_parse(): ensure we never use uninitialized variables. - entropy_collect_host(): no longer attempt to get the host IP addresses. - file_locate_from_path(): if pathname is qualified, duplicate argument! - ftw_foreach(): prevent memory leak on error path. - thread_lock_deadlock(): avoid de-referencing NULL if possible. - upnp_discovered(): avoid segfault when we have to pick the first device. Under the Hood: - Disable warnings about the mem vtable being deprecated in recent glib. - Suspend threads created after a global suspension is in effect. - Warn when we cannot find a thread to record / release a lock. - Added a new crash-level for deadlocks. - Added optional debugging code to track reading threads on a read-write lock. - Added spinlock_in_crash_mode_raw() for raw spinlocks to avoid deadly recursion. - Additional debugging code to track read spots per thread on a read-write lock. - Added backtrace capture when threads are contending for a lock. - On deadlocks, suspend the other threads and log origin quickly before handling. - New strategy in lock "deadlock" routines: ignore when in pass-through mode. - Do not perturb the lock waiting state of the crashing thread on a deadlock. - Revisited thread_lock_deadlock(). - Check for stack overflowing each time a lock is grabbed and recorded. - Added thread diversion support. - Added thread_halt() to forcefully halt concurrently crashing threads. - Refactored memory checks to avoid systematic locking in mem_is_valid_ptr(). - Try to divert crash processing to main thread when triggered in a sub-thread. - On deadlock condition, attempt to collect stacktraces of other threads. - Add the current process PID and the last crash level to the crash log. - Use raw logging routines in spinlock / mutex deadlock tracing. - Added crash_getpid() for safe original PID computation, even across a fork(). - Add dump of all the thread stacks to the crash log if we can't fork(). - Moved equiv() and implies() definitions to "casts.h". - Added xxx_to_string_grp() to optionally format xxx with thousand groupping. - Adding win32 dynamic library patcher to trap malloc() in all required DLLs. - Windows: with win32dlp, no need for monitoring committed memory. - Renaming of legacy G_GNUC_XXX into G_XXX for concision. - Renamed G_N_ELEMENTS as N_ITEMS. - Moved gcc-specific macros to a dedicated file. - Added pragmas to shut up spurious warnings with the clang 3.4.1 compiler. - On the lock recording path, we can now use thread_get_element() safely. - Made sure symbols are thread-safe and properly locked. - If stacktrace dumps could intertwine, prefix the second with the thread ID. - Allow for nested lock waiting sequences. - Added SIGSYS to the list of harmful signals we want to catch. - Added THREAD_F_WAIT to let thread_create() wait for the new thread to start. - Windows: was not reconstructing correct stack frame pointer for WINAPI calls. - Windows: improved backtracing through routines using a large amount of stack. - Made signal_enter_critical() and signal_leave_critical() thread-safe. - Made signal_in_handler() thread-safe. - No longer block signals when waiting for a read-write lock. - Prevent signals during logging, to avoid recursion if logging from handler. - rwlock: when waiting for too long, deadlock only when no activity is seen. - Added hash_table_is_locked(). - Added compat_gettid() and use it to record the system thread ID. - Added support for thread_interrupt() and thread_os_kill(). - Windows: make sure s_read() can return EINTR and handle it properly. - Windows: added support for sigprocmask(), sigsuspend() and friends. - xmalloc: count and loudly trace allocation attempts made from signal handler. - omalloc: loudly warn when invoked from signal handler. - VMM: warn when memory allocation / freeing attempted from signal handler. - VMM: use groupped formatting for region sizes or large numbers. - Make sure we do not dispatch thread signals when running in an interrupt. - Added s_minicarp_once() and a circular buffer to avoid memory allocation. - Monitor when we issue blocking syscalls to flag signal handlers as safe/unsafe. - Added plumbing to allow longjmp() or siglongjmp() in a signal handler. - booleanize(): use version not causing any jump, for speed. - clamp_strlen(): use same optimization as utf8_strlen() to compute length. - mingw_analyze_prologue(): fixed MOVL immediate offset parsing. - mingw_exception_log(): simplify processing on stack overflows. - mingw_getdtablesize(): don't call _getmaxstdio(), hardwire 2048 instead. - mingw_signal(): only call signal() for SIGSEGV. - mingw_sigraise(): only log sent signal when asked to. - mingw_waitpid(): fixed compilation warning given that WAIT_OBJECT_0 is 0. - mingw_win2posix(): added mapping for ERROR_INVALID_USER_BUFFER. - mingw_win2posix(): added mapping of ERROR_NO_SYSTEM_RESOURCES to ENOMEM. - mingw_write(): for Windows 7 and maybe later, do not call write(). - mutex_is_owned(): optimized by avoiding thread_self() call if mutex not locked. - prop_save_to_file(): use file's timestamp, not the current time. - rwlock_not_owned(): ignore errors when the rwlock layer is in pass-through. - s_logv(): made recursion detection thread-safe. - s_logv(): use raw time computation when running in signal handler. - s_minierror(): enhanced to enter crash mode immediately and show thread ID. - s_rawlogv(): force "raw" mode when running in a signal handler. - s_stacktrace(): downgrade from decorated to plain stack before skipping traces. - signal_name(): added more items to signals[], so cache linear lookup result. - spinlock_grab_try_from(): no crashing mode, don't say we locked if we couldn't. - stacktrace_get_symbols(): make sure we're running this only once. - stacktrace_unwind(): detect recursion in a thread-safe way. - stacktrace_unwind(): use gcc-style unwinding if recursing or within malloc. - str_vncatf(): added verbose assertion to ensure string is not overflowing. - symbols_name_only(): simplified code. - symbols_name_only(): simplify processing if we don't have to format an offset. - thread_check_suspended(): account for thread_find() returning NULL. - thread_cond_waiting_element(): don't create the cond stack until necessary. - thread_exiting(): do not reset the QID range on Windows for an exiting thread. - thread_id_name(): be robust if called during crashes. - thread_launch_trampoline(): do not harvest entropy, this slows down creation. - thread_lock_got_swap(): missed accounting of new lock in discovered thread. - thread_lock_waiting_element(): warn when we detect recursive lock waiting. - thread_preallocate_element(): also pre-allocate the lock stack. - thread_sig_handle(): don't handle signals if thread is supposed to be blocked. - thread_small_id(): bet on the QID lookup success. - thread_sp(): simpler version defeating compiler optimizations. - tm_localtime_raw(): use exact time, as this is used during logging. - xmalloc_thread_alloc(): refuse to allocate if within a signal handler. Enjoy! Raphael |
From: Raphael M. <Rap...@po...> - 2015-12-18 21:56:25
|
Dear Gnutella fans, I have just made an emergency 1.1.8 release: # v 1.1.8 2015-12-18 [stable] This is an emergency bug-fixing release. It addresses systematic crashes on some platforms, right at startup time, and prevents random deadlocks on OS/X. The systematic crash was due to an innocent change, which actually perturbed the order of the initialization routines and, depending on the conditions, caused an assertion failure during one of the thread startup. Curiously, the error manifests randomly and does not seem to depend on the OS but rather on other subtle environment issues: one Linux distribution could be fine whilst another was hit by the bug. Enjoy! Raphael |
From: Raphael M. <Rap...@po...> - 2015-12-13 17:49:08
|
Dear Gnutella fans, Here is the ChangeLog for the 1.1.7 version which has just been released. # v 1.1.7 2015-12-13 [stable] This release adds support for new features: - TLS upgrade of existing connections. - Inbound HTTPS connections - Use of a supervisor process to relaunch gtk-gnutella on crashes The TLS upgrade allows connections that have started without TLS to negotiate TLS on the fly without having to reconnect. They are flagged as "e" to show that encryption was dynamically added, as opposed to "E" which indicates an initial TLS connection. Certificates are now automatically generated and this allows HTTPS connections from browsers. For now this is of limited use, but it will come handy in the near future when building a web-enabled GUI. To be more resilient against crashes, gtk-gnutella now automatically launches a supervisor process that will launch the real gtk-gnutella as a child process and monitor its fate, restarting a new process when the old one failed. This is far more robust than having the process re-exec() itself at crash time since there are some crashing conditions that do not even allow the process to go that far in the crash handling... On Windows, provided you have installed Cygwin's gdb, crash logs will now contain a gdb backtrace of the failing process, making analysis of what went wrong easier than with a simple stack trace. Your previous GUID and KUID will be regenerated the next time you restart due to a new algorithm used to detect that a configuration file is not accidentally reused on another machine: the host name is now included, instead of just the physical file information. So when moving a disk to another machine, or simply cloning an existing virtual machine, we are no longer going to reuse these IDs which are supposed to be unique by properly detecting that the information was copied over. A bug in open_read() caused the Geo IP database to not be loaded on Windows. Finally, all the options given to gtk-gnutella can now be abbreviated as long as they are not ambiguous (i.e. enough is given to make them non-ambiguous). For instance, given the current set of options, --p would be ambiguous but --s will always mean --shell. However, --pi is not ambiguous and refers to --ping. Improvements: - By default, gtk-gnutella now supervises its children to restart them. - Now allows incoming HTTPS connections. - Added support for Gnutella connection upgrade to TLS. - Added support of RFC-2817 for upgrading to TLS within HTTP/1.1. - Dump symbolic stack when crashing in supervised mode with our parent. - VMM: added new flag to signal OOM condition and be aggressive with the cache. - Options can now be abbreviated as long as they are not ambiguous. - Added support for Virtual Memory Emergency Allocation (VMEA). - Pulled latest translations from Transifex. Bug Fixes: - Make sure node_by_guid() cannot return a G2 node! - VMM: fixed memory allocation logic during crashes. - open_read(): fixed logic on Windows when no renaming is requested. - Make sure we don't restart nor pause a failing process on --shell or --ping. Under the Hood: - Added spopen(), a simple popen() bypassing the shell. - Added Windows-specific PROT_GUARD protection type for mprotect(). - Added log_show_pid() to direct the logging layer to show or hide the PID. - Added library support for file locks. - Added compat_process_exists() and compat_kill_zero(). - Added ability to dynamically limit walloc() usage, remapping to xmalloc(). - Added ability to disable halloc() at runtime, remapping it to xmalloc(). - Added specific PID file for locking out the supervisor process. - Do not install periodic xgc() and zgc() unless running in a long-term process. - Refactored main() initializations to limit memory usage in the supervisor. - Windows: stop fatal recursion when the VMM layer extends the pmap. - Windows: revisited exception logging to give more details and simplify code. - Windows: reworked stack overflow detection logic. - Windows: added launch() and spopen() support. - Windows: added support for wait() and waitpid() on launched processes. - Windows: launch gdb in a separate thread to get symbols when crashing. - Windows: re-worked early init code to allow memory allocation. - Windows: will now be building with gnutls-3.4.5. - Windows: added getppid() support. - Windows: added getuid(), geteuid(), getgid() and getegid() emulations. - Windows: try to have SymInitialize() done as soon as possible. - Windows: added support for getrusage(RUSAGE_CHILDREN). - Make sure the logic used to construct fallback path is consistent. - Refactored Windows socket initialization. - Refactored setproctitle(), adding getprogname() and setprogname() as well. - Revisited crash_mode() to include the notion of criticity level. - Switched rand31() to the Park and Miller algorithm. - SDBM: added fadvise() hint for page accesses, with a "random" access mode. - Use short_time_ascii() instead of short_time() in log messages. - TLS: use our own random number generators. - TLS: use new types, with the _t trailing prefix. - TLS: added support for a global audit log, available since gnutls 3.0. - TLS: added vectorized push routine. - TLS: added generation of private server key at startup if missing. - TLS: don't need anonymous server credentials if we have a certificate. - TLS: added generation of self-signed certificate at startup if missing - TLS: removed ARCFOUR-40 from the list of overrides for GnuTLS 3.4.5. - TLS: enhanced to support GnuTLS 3.x and allow HTTPS connections. - TLS: the "custom I/O" push/pull routines are now the norm. - TLS: normalized logging to always use G_STRFUNC for non-informative messages. - SHA1_process_message_block(): make sure SHA1 is correct on big-endian systems. - cq_init(): always warn if callout queue exists, regardless of its thread. - cq_init(): loudly warn if the callout queue was created automatically before. - crash_generate_crashlog(): dump thread locks before current stack. - crash_init(): now calls stacktrace_init() with immediate symbol loading. - crash_invoke_inspector(): also attempt to launch gdb on Windows. - crash_invoke_inspector(): force emission of decorated stacks. - crash_try_reexec(): do not exec() ourselves when we have a supervising parent. - download_get_server_name(): when name changes, reset some internal attributes. - entropy_seed(): make sure we're correctly seeding our KISS RNG. - file_locate_from_path(): tweaked for Windows to add implicit "." in PATH. - gtk_gnutella_atexit(): do nothing if we're already crashing. - gwc_parse_dispatch_lines(): avoid using "eof", it shadows a global on Windows. - hash_table_replace(): fixed logic when inserting into a fix-sized table. - kuid_random_fill(): use random_key_bytes() to generate unique KUID. - mingw_exception(): maintain exception recursive depth per thread. - mingw_execve(): redesigned to avoid using external resources. - mingw_fcntl(): added F_RDLCK (read-lock) support for F_SETLK operations. - mingw_fcntl(): return ENOSYS for unimplemented parts, not EINVAL! - mingw_signal(): be thread-safe, in case of concurrent updates. - mingw_sigraise(): trace signal, since it could be the prelude to a crash. - node_can_accept_connection(): even when "offline", accept nearby hosts. - node_is_now_connected(): watch out for disconnected nodes after RX injection. - pncs_convert(): avoid using the stack, prefer a thread-private buffer. - sdbm_set_volatile(): forgot to grab lock on entry. - sdbm_thread_datum(): avoid too many re-allocation overhead, sacrificing memory. - settings_random_save(): now merge randomness instead of just superseding it. - shell_exec_thread_list(): use configured stack size if available. - signal_perform_cleanup(): trace signals we get during cleanup. - spinlock_crash_mode(): dump PID as well in case process forked. - stack_print_decorated_to(): switch to lighter tracing if we hit an OOM. - thread_launch(): warn once if pthread_attr_setstacksize() returns an error. - thread_launch_register(): force new PROT_GUARD protection on red-zone page. - tls_handshake(): log IP:port and whether remote is client or server. - tm_init(): now controls whether to start the time thread. - unique_file_token(): include the hostname into the unique file ID. - vxml_parser_remove_buffer(): application logic was done only when debugging! - xallocate(): when crashing, use omalloc() for small blocks, instead of sbrk(). Enjoy! Raphael |
From: Raphael M. <Rap...@po...> - 2015-11-08 14:15:35
|
Dear Gnutella fans, Here is the ChangeLog for 1.1.6, which unfortunately I forgot to package! # v 1.1.6 2015-11-08 [stable] This is a bug-fixing release. This time it focues on Windows, which apparently exercised some bugs in common code with other platforms -- so some fixes are going to benefit to everyone even though the bugs did not manifest themselves as often. Improvements: - Increased default and max for "max_leaves" to account for modern systems. - Pulled latest translations from transifex. - Updated GeoIP databases. Bug Fixes: - Fixed memory leak on the error path of OOB / G2 query hit sending. - Fixed memory leak on the file upload path. - aging_insert(): was not properly handling freeing of keys, causing leaks. - Fixed property description message for "max_leaves". - Windows: no HEAP_NO_SERIALIZE flag on HeapAlloc() since we're multi-threaded. - mingw_valloc(): fixed monitoring of unreserved VM space. - Windows: optimized the inital VM space reservation. - rpc_delay(): avoid int overflowing, which would make delay negative! - node_udp_sr_data_ind(): do not crash if UDP was disabled or port was 0. - Fixed crashes in the omalloc() layer. Under the Hood: - Make sure an initial GMT offset is computed before the time thread starts. - Compact the aging structure on 64-bit platforms. - Fixed possible race between evq_trampoline() and evq_event_discard(). - Added safety assertions: a removed item must belong to the list. - Fixed typos in safety assertions. - EVQ: closed race condition betweeen queues recreated in same thread ID. - Use getrlimit(RLIMIT_AS) to get the available space, not RLIMIT_DATA. - Windows: try harder to compute a relevant break value with sbrk(0). - Windows: added cpp trap for dup(). - Windows: fixed fcntl(F_DUPFD) implementation which was not thread-safe. - Windows: dump symbolic PC on stack overflows, after basic information. - elist_remove(): assert that removed item must be part of some list. - evq_event_discard(): be quiet when removing event for the event queue thread. - evq_event_discard(): correctly handle cancelable events. - evq_trampoline(): factorize removal of triggered item from queue list. - evq_trampoline(): fixed logging message to use copied value. - getgateway(): on Linux, cache previously computed value in case netlink fails. - getgateway(): on Linux, the netlink socket can return EAGAIN on recv(). - main_command_line(): optimized and simplified! - malloc_init_vtable(): be sure to set G_SLICE=always-malloc on Windows. - mingw_exception(): skip printing of stacktrace if we got a stack overflow. - mingw_getrlimit(): implement a better RLIMIT_DATA query. - mingw_getrlimit(): return different max / current values to account for usage. - mingw_signal(): always record signal handler in our internal list of handlers. - mingw_valloc(): don't complain about non-hinted allocations when crashing! - mingw_valloc(): use s_minicarp() to limit resource consumption. - mingw_valloc(): when nearing out-of-memory, take data segment into account. - mingw_vmm_init(): accelerate initialization, reducing amount of system calls. - mingw_win2posix(): handle 0 to avoid warnings when called with no error. - mingw_win2posix(): mapped ERROR_BAD_EXE_FORMAT to ENOEXEC. - mingw_win2posix(): mapped ERROR_NETNAME_DELETED to EHOSTUNREACH. - mingw_win2posix(): use s_minicarp() instead of s_warning() to see "culprit". - omalloc_allocate(): was releasing spinlock too soon in read-only mode. - omalloc_chunk_allocate_from(): fixed bug when header dissolution was required. - publisher_handle(): simplified code by factorizing shared_file_unref() call. - s_minicarp() and s_minicrit(): carefully avoid stdio when dumping stack. - sdbm_close(): ensure we sync pending dirty data when database is not volatile. - sdbm_name(): return path to the .pag file if no name was explicitly given. - settings_init(): when computing max VM space, use max from RLIMIT_AS, not cur. - socket_create_and_bind(): on Linux systems, force SO_REUSEADDR before bind(). - sort-test: reduce verbosity by default. - thread_suspend_others(): silently suspends itself if concurrently asked to. - udp_sched_write_error(): don't dump a stack trace on send errors we expect. Enjoy! Raphael |
From: Raphael M. <Rap...@po...> - 2015-10-08 17:47:03
|
Dear Gnutella fans, I have just released gtk-gnutella 1.1.5, with the following changes: Important bugs were fixed, you are invited to upgrade if you want to ensure stability, as some of these bugs can trigger anytime and crash your session. # v 1.1.5 2015-10-08 [stable] This is a bug-fixing release. Most of these bugs were discovered by investigating why gtk-gnutella was frequently crashing on OS/X platforms. Why other platforms were not having the same problems remains a mystery, since all these bugs were not specific to OS/X, apart from the vmm_munmap() bug -- since mmap() is only used on OS/X due to its lack of the sendfile() system call. One of the fixed bugs could lead to a crash when the network connection was broken (e.g. a cable unplugged or a WiFi connection terminated). Improvements: - UHC: re-engineered the random choice of UHCs in the pre-established list. Bug Fixes: - qrt_patch_compress_done(): fixed race with qrp_comp_done(). - xmalloc: prevent deadlock when freeing deferred blocks on the allocation path. - pmap_remove_from(): protect from exceptional corner case to avoid crash. - ut_frag_pmsg_free(): don't requeue an unsent message synchronously. - VMM: fixed race condition in vmm_munmap() that could lead to failures. - omalloc: fixed chunk management when memory alignment is required. Under the Hood: - well_state_discard(): fixed missing indexing of array pointer. - thread-test: avoid mixed output by using atomic I/Os to stderr for messages. - thread-test: main testing entry points now clearly flagged in output. - signal_trampoline(): be verbose and lenient when our pre-condition fails. - evq_event_discard(): fixed message to log the name of the registering thread. - hash_list_lookup(): was mistakenly returning a const value. - thread_private_set_extended(): ensure a NULL free routine clears any old one. - crash_mode(): removed redundant call to thread_suspend_others(). - rand31_random_seed(): avoid popcount(), prefer modulo with a prime number. - hash_offset_init_once(): avoid entropy_minirand(), causes dealocks on Windows. - uhc_send_ping(): if we cannot contact selected UHC, try with another one. - omalloc_chunk_*protect(): ensure chunk is consistent with page boundaries. - More assertions in omalloc() to ensure we're not corrupting memory. - Use global mutex to protect symbols_xxx() calls, simplified stacktrace code. - Reduced UHC retry time from 1 hour down to 3 minutes. - Revised UHC list. - More thread-safe refactoring for other stringification routines. Enjoy! Raphael |
From: Raphael M. <Rap...@po...> - 2015-04-08 20:48:30
|
Dear Gnutella fans, I have just released gtk-gnutella 1.1.3, with the following changes: # v 1.1.3 2015-04-08 [stable] This is mainly a critical bug-fixing release, addressing a huge shortcoming in 1.1.2: all Shareaza leaves are incorrectly flagged as being fakes and are being removed quicktly from ultrapeers, creating network churn and instability. ===> Everyone running gtk-gnutella as Ultrapeer must upgrade to 1.1.3 quickly. Releasing shortly after 1.1.3 was also a pretext for improving stability on Windows platforms, especially after restarts: because Windows does not support the "close on exec" flag on file descriptors, restarted processes were left with several instances of a listening socket bound to the same port, causing havoc as behaviour is totally undefined and was most probably leading to the inability for the process to get any incoming connections. On Windows, we now also monitor the memory usage more closely, in order to avoid the C runtime from issuing a (blocking) popup signalling a fatal memory allocation error should it run out of space. More generally, the VMM layer is now capable of trapping fatal memory allocation errors and handling them more efficiently. In particular, when everything has failed, the layer can request a brutal restart of the process. Under less dire circumstances, a graceful restart will be requested. This was also an occasion to revisit the long-term allocation strategy in the VMM layer and optimize it in order to further limit fragmentation of the VM space. Even though avoiding fragmentation matters mostly for 32-bit applications, this also limits the amount of individual memory region mappings the kernel has to maintain and gtk-gnutella has to keep track of. Finally, a last-minute bug fix where a user reported a deadlock in the QRP processing code. After investigation, it turned out that there was indeed a recursive locking on a spinlock that had escaped all real-life testing out there so far! Improvements: - [GTK2] Added popup menu icon in front of "force push mode" for sources. - [GTK2] Added warning icon in status bar when kernel runs short of net buffers. - Increased default node connection timeout and size of the quick connect pool. - Updated the shell "status" command to display "!IP" on net buffer shortage. - Updated FAQ along with French and Turkish translations. - Updated GeoIP databases. Bug Fixes: - Fixed invalid test for "fake" Shareaza that led to network instabilities. - Made QRP lock a mutex to allow for recursive locking through qrp_comp_done(). Under the Hood: - On out-of-memory conditions, attempt to auto-restart if possible. - Windows: monitor committed memory, crashing before the kernel would kill us. - Added crash_restart() and controlling routines to request smooth restart. - On network buffer shortage (ENOBUFS), stop TCP connections for a while. - UPnP: protect upnp_mapping objects given to callbacks with reference counts. - Adjusted lock tracking when locks are disabled, fixing lock swapping. - Windows: remember socket descriptors so that we can close them on exec(). - Refactored code for listening sockets to warn when bound port is already used. - When shutdowning in "crash mode", skip most of the memory cleanup. - rwlock_destroy(): make sure to write-unlock the lock if it was owned. - waiter_ack(): don't panic if waiter was not notified, but loudly complain. - upnp_map_natpmp_publish_reply(): trace given port on NAT-PMP mapping errors. - upnp_discover(): force selection of IPv4 interface for UPnP discovery. - thread_unsuspend_others(): relaxed hard assertion into a soft one. - alloc_pages(): try harder on OOM conditions to allocate from the page cache. - socket_connect_finalize(): fixed wrong errno processing for connect(). - socket_connect_prepare(): no need for SO_REUSEADDR for connecting sockets. Enjoy! Raphael |
From: Raphael M. <Rap...@po...> - 2015-03-21 18:32:19
|
Dear Gnutella fans, I have just released gtk-gnutella 1.1.2. Here is its ChangeLog entry: # v 1.1.2 2015-03-21 [stable] This is mainly a bug-fixing release, addressing rare crashes that have been happening in production. It also contains several improvements. It fixes a user-reported bug whreby it was not possible to properly configure the download paths using the GUI -- that led to application crashes due to the incomplete support for discovered threads (which GTK is using underneath to manage the dialog box). Another bug was caused by the HTTP header parsing logic which did not allow "." in header names. That made it refuse to parse headers sent by some UPnP devices, such as "BOOTID.UPNP.ORG" or "CONFIGID.UPNP.ORG", prevening UPnP mappings from being installed. Hapening rarely but still annoying, there was a bug on the error handling path of write errors to the TX network stack, leading to assertion failures in the mq_tcp_putq() routine. That was because the qrt_compressed() routine was not handling task cancellation properly. The likelyhood of hitting that bug when running as a leaf node was very low. On the improvement side, the search list is now highlighting searches for which we have associated downloads by displaying the text in green. Further tweaks were made to our GTK2 code to make sure the changes are reported "real time" when the state changes, which was not always the case before (one needed to go over a search by explicitly clicking on it to update the display in the search list). The SHA1 computation code was also further optimized to be as fast as possible, reducing file hashing time by two! Since SHA1 hashing happens regularily in gtk-gnutella to collect entropy, optimizing the SHA1 computation affects more than just file verification. Improvements: - [GTK2] Added translation URL in the "About" GUI dialog. - [GTK2] Highlight searches with registered downloads by using green text. - [GTK2] Added tri-state column sorting to the "upload history" panel. - FAQ: added new entry explaining how to get the magnet of a shared file. - Map the "collection" G2 query tag to the Windows / Linux "archive" file set. - Map the "torrent" G2 query tag to the "torrent" file set. - Added support for "rom", "wordprocessing" and "subtitle" G2 query media types. - Further optimized SHA1 computation, now going about twice faster for files. Bug Fixes: - page_cache_insert_pages(): fixed incorrect write-lock upgrade logic. - pmap_insert_region(): must recompute insertion index if we extend the pmap! - tmalloc: fixed thread magazine accounting in the depots. - Did not commit back to database after updating the DHT key request count. - routing_chunk_move(): must check messages carefully when chunk was moved. - route_message(): beware of check_duplicate() which can remove the node. - thread_element_matches(): pay more attention to discovered threads. - thread_find_tid(): skip thread elements not marked as being valid! - node_shutdown_mode(): must correctly account for shutdowning G2 nodes! - bogons_changed(): forgot to close opened file descriptor - upload_stats_load_history(): added missing break in switch. - qrt_compressed(): was not handling QRP compression task cancellation properly. Under the Hood: - Added hostile ranges. - Updated GeoIP databases for IPv4 and IPv6. - Throttle the amount of PUSH messages we can send for a given remote server. - Legitimate Shareaza nodes cannot be flagging themselves as ultrapeers. - Windows: stack unwinding made safer with more memory checks to avoid faults. - UPNP: attempt rediscovery of port mapping devices every hour, if missing one. - UPNP: attempt rediscovery of port mapping devices every hour, if missing one. - Added new TSIG_OVFLOW signal sent when a thread overflows its stack. - Fixed race condition between concurrent waiter_refcnt_dec() calls. - Added logging of layer which reports a TX error in case of assert failure. - Track the last seen time (activity) of discovered threads other than main. - Prevent glade-2 from outputting support files now, since we patched them. - Added tracing of funny X-Falt lines we are seeing when demsh_debug is set. - Added tracing of funny X-Alt lines we are seeing when dmesh_debug is set. - Added tracing of funny X-Nalt lines we are seeing when dmesh_debug is set. - Added crash hook for the thread layer. - Added TX layer write-fault mechansim to help detect user error handling bugs. - Syntaxic adjustments to make the latest guile happy with definitions. - The GUI will now display current bandwidth by default, instead of the average. - mingw_exception(): write shorter messages in case of stack overflows. - thread_element_reset(): forgot to reset te->stack_base to NULL. - header_append(): allow "." in header names. - thread_join_internal(): no thread_cancel_test_element() on foreign thread! - thread_find_element(): avoid leaving routine without unlocking mutex! - cond_wait_until(): now correctly handle underlying cond variable mutation. - thread_block_timeout(): don't panic if main thread already unblocked. - dir_entry_filename(): made the Windows version thread-safe. - hfield_dump(): fixed formatting of continuation lines. - dmesh_collect_locations(): only parse the last timestamp when many given. - xmalloc_thread_free(): always handle blocks in the cross-thread free list. - Hide strtok_free(), forcing clients to use new strtok_free_null(). Enjoy! Raphael |
From: Raphael M. <Rap...@po...> - 2014-09-02 20:29:48
|
Dear Gnutella fans, The release 1.1 was a major release introducing many features, and naturally some minor bugs had crept in. This new release is addressing all the ones that I discovered or were reported. There is a protential for remotely-induced crashes due to the mistake in the push-proxy URL parsing code, therefore I would strongly suggest that you upgrade to this new release quickly. Here is the ChangeLog entry pertaining to that release: # v 1.1.1 2014-09-02 [stable] This is mostly a bug-fixing release. Improvements: - Share Opus files by default, added opus and webm to search filters. - No longer automagically unshare directories that do exist currently. - Revamped peek/poke functions because GCC generated unoptimized code for these. Bug Fixes: - Avoid crash when we cannot parse the remotely supplied push-proxy URL. - Fixed crash when entering "local:" as search term. - Fixed crash when gtk-gnutella was stopped from terminal and put to background. - Fixed crash on "Reverse DNS lookup" queries from the GUI node pane. - Fixed GtkSpinButton "adjustment with non-zero page size" deprecation message. - Handle G_SEARCHPATH_SEPARATOR in shared base directory correctly. Under the Hood: - shared_file_get_index(): fixed lower boundary of assertion. - fi_find_aggressive_candidate(): prevent division by 0 if no starving download. - Fixed possible race condition between bg_task_wakeup() and bg_sched_sleep(). - Regenerated Configure to allow BFD library detection for newest versions. - teq_post_rpc(): use linearily increasing timeouts to limit logging. - str_vncatf(): made recursion checks before calling s_minicarp() thread-safe. - ut_frag_pmsg_free(): avoid SIGSEGV when fragment was already acknowledged. - deflate_add(): refuse further data when the TX deflate layer had an error. - search_dequeue_all_nodes(): must also iterate on G2 nodes. - cq_heartbeat(): only log delay adjustements when running with cq_debug > 0. - g2_node_handle(): silence warnings when not debugging. - Allow xfl_find_freelist_index() to work with gcc 4.9 and optimizations. - keys_offload(): do not process if the key layer was shutdown. Enjoy! Raphael |
From: Raphael M. <Rap...@po...> - 2014-07-02 20:16:35
|
Dear Gnutella fans, This is it! The multi-threaded gtk-gnutella application with added G2 search support. In addition, I recommend everyone to upgrade immediately to this new version, all previous versions having a hole leading to possible Denial of Service by would-be attackers (now that the code is released, this fact is public). Here is the ChangeLog entry pertaining to that release: # v 1.1.0 2014-07-02 [stable] This is a major release introducing new features and making gtk-gnutella a multi-threaded application with drastic performance boosts for background tasks like file hashing or library rescanning. Another major feature is the added support for the G2 search protcol: we are connecting to G2 hubs as a leaf, answer to search / browse requests from G2 hosts. We also use G2 to issue our own searches. Finally, we freely exchange files with G2 hosts (downloading and uploading). The G2 protocol was further extended to make sure G2 query hits convey as much information as Gnutella query hits, in particular for alt-loc propagation and TLS support. The G2 semi-reliable UDP layer is also leveraging the new features designed for the corresponding Gnutella layer (cumulative and extended acknowledgments), gracefully falling back to legacy features if the remote host is not able to understand the new features. A critical bug was fixed: reception of carefully crafted invalid DHT messages would lead to an immediate crash, an open door for Denial of Service (DoS) attacks. That bug has been present since 0.97 (release of August 2011). Last but not least, the code base has now been checked by Coverity. There was a very low defect rate of 0.26 (amount of true defects per thousand lines of code) and all problems were fixed. New Features: - Multi-threading support (file hashing, library rescan, DNS, etc...) - Added support for the G2 search protocol, connecting as leaf mode to G2. - Turned gtk-gnutella into a random number server through the "random" command. - Removed Bitzi support since the service has shutdown. - Added the --no-dbus command-line option to prevent D-BUS notifications. - [GTK] Added GUI enabling of the G2 protocol for searches. - [GTK] Added spin-button to set the amount of G2 hub connections to maintain. - [GTK] Report amount of G2 hubs to which we are connected. - [GTK] Show amount of G2 host browsing served, in the upload stats pane. Improvements: - [GTK2] Added tri-state column sorting to "Downloads" and "Uploads" panes. - Better entropy collection to initialize the pseudo random number generators. - Externally visible randomness (e.g. GUIDs) is now cryptographically strong. - We now pick random DHT nodes to send back from the whole routing table - Some entropy collected is persisted, for better reseeding in next session. - Added time change detection when switching from/to Daylight Saving Time. - QRP query routing now uses LimeWire's logic, less strict than the GTKG one. - The shell "status" command now reports the amount of G2 hub connections. - Detect OOB proxy MUID conflicts for leaf queries. - Added the "stats drop" shell command to show dropped message statistics. - Improved random selection of files being matched in the library (local hits). - When a PUSH request fails to connect back, ban target IP:port for 5 minutes. - Configure: correctly detect the BFD library even if no -liberty. - Crash handler now records and logs the ID and name of crashing thread. - Updated gtk-gnutella.appdata.xml to the latest specifications. - Updated the FAQ, along with translations to French and Turkish. Bug Fixes: - DHT bucket merging was incorrectly handling removal of nodes from table. - Reception of improper DHT messages could lead to an immediate crash (DoS). - ut_frag_pmsg_free(): rescheduling of expire event was in wrong block. - base16_encode(): would cause buffer overflow when destination too small. - Rotate OOB token keys less often, to avoid expiration whilst in transit. - socket_udp_event(): ignore empty datagrams. - Fixed host cache updates to avoid setting "out of bounds" property values. - hcache_find_nearby(): was missing a "break" in the case for HOST_GUESS. - Scheduled static checking by Coverity, found 81 problems requring a fix. - Fixed TCP message size computing bug, which could corrupt the TCP stream. - Configure: fixed endianess detection of IEEE-754 floats on Solaris. - Was never configuring TCP quick ACKs due to a missing "break" statement. - omalloc() could crash when configuring read-only objects. - Ensure we never insert any "unusable host" in the push-proxy set. - keys_update_value(): forgot to persist back updated expiration timestamp. - Properly flag UDP route as deflatable when GGEP "Z" is seen in queries. - Flag UDP route as supporting semi-reliable UDP when query flags are parsed. Under the Hood: - GUESS now avoids querying hosts to which we are connected via TCP - GUESS: count the amount of hosts reached by query, since G2 queries a cluster. - GUESS: increased cached lifetime of query keys to a little less than 1 day. - GUESS: defer hosts we cannot requery to avoid constantly looping over them. - GUESS: fixed host atom leak when message is synchronously dropped. - GUESS: invalidate cached query keys on IP or listening port change. - Added a thread management layer on top of the POSIX thread layer. - Added support for safe inter-thread signals, handled by our thread layer. - Expanded the set of atomic operations we can perform. - Added read-write locks, now used by the VMM layer. - Addded multi-threaded goodies: barriers, dams, event queues, cond variables. - VMM: closed race condition during allocations. - Added support for permanent thread-private data. - Added primitive fork() handling in a multi-threaded environment. - Made float formatting code thread-safe, removing need for funnelling. - The ADNS now always runs in a separate thread. - Provide both thread-private (hashtable) and thread-local (array) variables. - Added new "thread list" shell command to monitor running threads. - Added "task list" shell command to list currently defined background tasks. - Added the "thread stats" shell command to dump thread statistics. - Added "lib show callout" shell command to display callout queue information. - Added "lib show files" to show opened files via file_object_xxx(). - Made sure PROTECT_ATOMS and ATOMS_HAVE_MAGIC are orthogonal settings. - Moved the reference count of atoms to the tracking hash table. - Callout queue runs the idle callbacks if not scheduled in the last 30 secs. - Logging timestamps are now emitted with a millisecond accuracy. - Improved g_assert_not_reached() to propagate the routine name as well. - Re-architected file_objects to allow permission checking on opened files. - Introducing tqsort(), a multi-threaded quicksort for sorting large arrays. - Do not mark SIGPROF as harmful to allow profiling. - Added a thread-magazine allocator, used by walloc() and vmm_alloc(). - Allow execution of some shell commands in a separate thread. - Added our own plain one-way and two-way list implementation. - Added optimized item freeing for embedded lists holding walloc()'ed objects. - Added thread-local ARC4 random streams for increased throughput. - Added global and per-thread WELL and CMWC random number generators. - Added Fortuna-like algorithm (AJE -- Alea Jacta Est) for gathering entropy. - Added support for fixed-size hash tables, entirely held in a static buffer. - hash_table_replace(): optimized to avoid two hash_table_find() calls. - Protect query hit generation against concurrent library rescans. - No longer close all file descriptors in main, since threads use them. - Semi-reliable UDP: only send last fragment of large message to unknown hosts. - Semi-reliable UDP: make sure remote side is ACK-ing sent fragments only. - Semi-reliable UDP: avoid endless loops if unsent ACK message is dropped. - Semi-reliable UDP: added TX accounting for dropped and physically sent ACKs. - Semi-reliable UDP: was not releasing data structure for dropped ACKs. - QRP support for generation of 1-bit patches, and optimized 1-bit handling. - make_room_internal(): removed bug catcher from 2006, which never triggered. - Cleaned up Gnutella handshaking to emit an Accept if the remote sent one. - search_results_process(): do not record last hop as hostile on relayed hits. - Do not attempt to OOB-proxy queries in search_request()! - host_timer(): fixed wrong cut-off by "quick connect pool". - Added script to auto-generate enums along with symbolic and English text. - options_parse(): fixed parsing of values immediately following the option. - Shuffling of large arrays now performed using PRNGs with greater period. - Renamed "struct mutex" as "struct lmutex" to avoid conflicts on Solaris. - st_search(): randomly shuffle results only when we have more than we can send. - Windows: added emulated clock_gettime() and clock_getres(). - Dispatch entropy to PRNGs only once every 30 seconds at most. - Simplified rand31(), restoring its full period, and redesigned rand31_u32(). - sdbm_rebuild(): was not properly catching errors during copy. - prop_get_def(): switched to HCOPY_ARRAY() to avoid any size problems - kmsg_handle(): avoid dereferencing a potentially NULL pointer. - route_max_forward_ttl(): take a reference instead of a by-value parameter. - parq_upload_remove(): fixed assertion, which was always evaluating to TRUE. - Report errors if we cannot set a file non-blocking or request close on exec(). - Base32 decoding could fail spotting bad input due to short base32_map[] array. - search_matched(): was not counting the amount of skipped results in a search. - getgateway(): properly fallback to netstat parsing when socket() fails. - roots_fill_closest(): avoid memory leak on the error path. - Fixed UDP TX schedulers to allow both IPv4 and IPv6 message sending. - Make sure only developers will use autogen to regenerate the property files. - dh_route(): only compress UDP query hits when GUESS queryier supports them. - dh_route(): do not attempt UDP compression if message sent via reliable UDP. - Count UDP compression attempts and failures, including in semi-reliable UDP. Have fun! Raphael |
From: Raphael M. <Rap...@po...> - 2013-12-31 17:32:51
|
Hello Gnutella fans, Before 2013 closes, here's a new release of gtk-gnutella... It fixes (among other things) a GRAVE bug, whereby all the 1.0 versions out there think that all other gtk-gnutella are hostile. This creates great instability in the Gnutella network so everybody should upgrade to this new release immediately! Here is the ChangeLog entry pertaining to this release: # v 1.0.1 2013-12-31 [stable] This is a minor release correcting a grave bug causing gtk-gnutella to think all other gtk-gnutella out there are hostile. Other minor improvements are present, as well as low-level bug fixes. The most visible change is that filenames with parentheses are now mangled to have the parentheses turned into brackets, instead of being left as-is. This allows filename cut-n-paste into shell commands, without having to use the shell auto-completion to escape the parentheses. Improvements: - Generate a NM/1.0 HTTP-like header at the top of the pre-computed nm list. - [GTK] Avoid GUI flickering when widget sensitivity is changing quickly. - Replace "()" with "[]" in filenames for easier cut-n-paste in shell commands. - Windows: improved stack unwinding. Bug Fixes: - Fixed grave bug, making all GTKGs appear hostile. - qrp_close(): must disable periodic monitoring during shutdown. - filename_to_utf8_normalized(): fixed broken if/else logic in loop. Under the Hood: - Updated the GeoIP databases. - Added a Keywords entry for lintian in the gtk-gnutella.desktop file. - Fixed license link to point to GPL-2 on Debian systems. - Added gtk-gnutella.appdata.xml for distributions that need such a file. - Renamed icon.xpm as icon.48x48.xpm and icon.32x32.xpm as icon.xpm. - TLS: disabled SVN signature verification code, since we no longer use SVN. - Define our own G_STRFUNC, do not use the version from GLib. - vmm_resize(): fixed wrong implementation when vmm_crashing is true. - Semi-reliable UDP: drop traffic to host temporarily if we can't send messages. - Use a 5-minute TLS ban to avoid reconnecting to host with TLS when it failed. - download_mark_active(): do not reset fi->recv_last_rate on HTTP follow-ups - bsched_heartbeat(): fixed wrong delay computatation, use tm_elapsed_ms(). - gtk_gnutella_exit(): always emit final "cleanly exited" info. - zalloc_stack_accounting_ctrl(): used wrong lookup key, leading to crashes. - mingw_valloc(): handle initial non-hinted allocations larger than page. - signal_trap_with(): fixed improper return value computation for sigaction(). Enjoy! Raphael |
From: Raphael M. <Rap...@po...> - 2013-09-01 21:30:53
|
Dear Gnutella fans, Finally, at last, gtk-gnutella reaches version number 1.0. Some will say it was long due, others will say it's just a version number. Regardless, this new release is an important milestone because it is the last version that will be mono-threaded. Future releases will use a new runtime that will allow multiple threads to run concurrently, to be able to exploit common multi-core systems nowadays. Hence, 1.0 to signal that this is the last mono-threaded release... :-) In the forthcoming weeks, I'm going to brainstorm on #gtk-gnutella (at irc.freenode.net) about what to do next for the future releases. Which direction to go? How can we exploit the solid GTKG core to do even greater things? Given the limited manpower available on the project currently, I want to be able to focus on what is important, strategically important. You are all welcome to join on the IRC channel, during the evenings in Europe... Here is the changelog of the release. As usual, I hope you will enjoy using gtk-gnutella as much as we enjoy developing it and bringing it to you. # v 1.0.0 2013-09-01 [stable] This is a major release correcting a few bugs and adding small but interesting features such as the ability to limit dropping of received UDP messages, making the DHT keys and values persistent across sessions, SDBM file auto-compaction at startup, and last but not least, rarest-chunk downloading to optimize download efficiency when facing partial sources. New Features: - Let users define a maximum lease time for UPnP and NAT-PMP mappings. - Made DHT keys and values persistent across sessions. - When there are partial sources for a file, download the rarest chunks first. Improvements: - [GTK1] Optimize massive updating of the download source list. - [GTK] Dynamically update the list of available chunks in the file (blue line). - Files used to persist information across sessions are now auto-compacted. - The UPnP layer can now monitor more types of Internet Gateway Devices. - After unclean shutdown, rename existing core file in crash directory. - Detect servers that choke when receiving pipelined HTTP requests. - Added the Mersenne Twister Pseudo-Random Number Generator. - Remember when user requests an auto-restart, to keep the same session going. - Increased maximum download buffer size to 1 MiB and default to 128 KiB. Bug Fixes: - [GTK2] Set height of the pref/upload window (paths to files) to 100 pixels. - [GTK1] Fixed wrong enum value usage (c_fi_sources instead of c_src_num). - [GTK] Download source details were incorrect sometimes for queued downloads. - [GTK] Reserve display of partial file indication (PFS) to partial sources. - DHT traffic accounting was broken when semi-reliable UDP was introduced. - Was wrongly keeping orphan DHT contacts and removing alive ones! - Fixed wrong restarting DB key computation for DHT values (preventing crashes). - Fixed improper "good" alt-loc flagging from uploaders, leading to wrong mesh. - Fixed English typos in comments and user-visible messages. - Avoid selecting the magic fw-fw file index for partial files in query hits. - Fixed wrong propagation of duplicate messages with higher TTL. Under the Hood: - Fixed posix_memalign() so that we can now run with glib 2.36 and upwards. - [GTK] Update available ranges when the core sends a "range changed" event. - Added UDP datagram read-ahead to minimize local kernel drops (RX queue full). - Added UDP read-ahead statistics. - Ensure "DHT values" and "DHT raw data" SDBM files are consistently reloaded. - Fixed omalloc() memory usage accounting. - str_at(): fixed harmful typo causing it to seg-fault with negative offsets. - Do not send X-Features / X-Token on follow-up HTTP requests. - upnp_dscv_probed(): plugged memory leak. - UPNP: extract the Service Control Protocol Definition (SCPD) URL. - UPNP: monitor gateway with GetStatusInfo() if no GetTotalPacketsReceived(). - Some UPnP devices can advertize an API and yet return 401 (action invalid). - bigkey_hash(): more robust in case we encounter a big key and support is off. - udp_sched_write_error(): don't panic if we get an unexpected UDP write error. - Jumbo patch: replaced most gm_[v]snprintf() with str_[v]bprintf() calls. - Count truncated incoming UDP messages. - http_got_header(): fixed harmful typo causing mishandling of chunked output. - After 3 X-Nalt reports, move source from download mesh to the banned mesh. - Leave banned entries in the bad mesh for at least 5 minutes. - cq_free(): release mutex to prevent loud warning a shutdown time. - When the the crash handler child fails, append decorated stack from parent. - download_data_received(): extend fileinfo when file size is unknown. - Moved HTTP range parsing / handling from core to library (re-architectured). - Benchmark sorting routines at startup and select the most efficient. - socket_udp_flush_timer(): do not process queued datagrams during shutdown. - Make rand31() more random, especially on the low-order bits. - Added computation of chi-squared cumulative distributions. - Made entropy_random() 5 times faster on average. - Prefer random_value() over random_u32() followed by bit masking. - The random layer now uses the Mersenne Twister, excepted for random_bytes(). - hash_keyset_lookup(): was not always spotting first tomb correctly. - Let small hash tables be denser than larger ones. - Tweaked hash tables and derivatives for smaller memory footprint. - guess_pmsg_free(): make sure pool does not contain host before adding it back. - http_send_status(): was not properly detecting too large HTTP headers. - Semi-reliable RX UDP: re-ack everything well before the whole message expires. - Adjust maximum DHT value count per IP/network dynamically with DHT size. - Be careful when truncating body on an HTTP kept-alive connection. - ensure_unicity(): assume pidfile is locked when lock owner bears our PID. - Added protection when writing important files on filesystems like "ext4". - PARQ: accept to move an upload to the "dead" queue even if we wait for QUEUE. - Made GTK2 the default GTK version since GTK1 is not 64-bit safe. Thanks! Raphael |
From: Raphael M. <Rap...@po...> - 2012-11-11 17:27:04
|
Dear Gnutella fans, A new release has just been uploaded to sourceforge. Here are the changes since 0.98.3, as listed in the ChangeLog file: # v 0.98.4 2012-11-04 [stable] This is an important release correcting severe bugs affecting the overall wealth of the system: the PARQ upload queue was not properly restored, the DHT was not always sending correct values back (resulting in failed lookups), and SDBM (our hash-on-disk database) had two well-hidden bugs that could cause crashes at startup or that compromised regular runtime operations. This release also introduces an interesting improvement: we are now using a reliable UDP layer to transfer out-of-band query hits, ensuring that these important messages are properly sent and received and never lost. The SPAM-detection on query hits received via UDP was too eager to discard results from perfectly valid sources, causing improper loss of results from your queries. We were also wrongly sending out more queries than necessary: a long-standing bug caused locally-issued OOB-proxied queries to be re-emitted a second time, and we were re-forwarding duplicate queries (received with higher TTL than before) to all the leaves. Although not harmful, these two bugs were wasting some of the outgoing bandwidth when running as a ultra node. New Features: - Plugged support for "OOB Proxy Veto". - Added a Semi-Reliable UDP layer for Gnutella for safe OOB hit delivery. - Report and display available file size when handling hits for partial files. Internationalization: - Added French and Turkish translations of the FAQ. - Updated French and Turkish translations. - Fixed typo in a German translation. - Cleanup of the English FAQ, updating obsolete answers. Improvements: - [GTK] Show different icon and tooltip when port mapping done through NAT-PMP. - [GTK] Flag results from servents with a banned GUID in the "Info" column. - [GTK] Windows version now compiled with GTK 2.24.10. - Non-sharing servents can now be promoted to ultra peers (in automatic mode). - Be stricter about vendor messages origin: ignore them if from wrong protocol. - Strip GGEP "NP" key from relayed queries. - Use higher-priority UDP messages for important or time-sensitive data. - Use semi-reliable UDP to transfer critical data (query hits). - Make sure the queries we OOB-proxy have a GGEP "SO" key for secure OOB hits. - Ignore unsecure OOB hit promises from hosts known to support secure OOB. - Use some of our connected ultra nodes when filling UHC pongs. - Updated GeoIP databases. - When resuming from crashes, do not stop session-only searches. - Persist selected search media types from session to session. - Report last modification time + available size of partial files in hits. - Added "webm" and "zoo" to the list of file extensions that can be shared. - Display unexpected command-line argument before usage output. - The shell "status" command now shows how port mapping was done, if any. - Do not forward "What's New?" queries to leaf nodes with empty routing tables. Bug Fixes: - Avoid segmentation fault if GUESS 0.2 cache is empty. - Avoid SDBM crash when clearing database which had big keys/values present. - Use signed arithmetic to compute compression ratios. - Consider x.x.x.0 as a possibly valid IPv4 address. - Was not correctly parsing the saved PARQ queue, causing undue forgetting. - Fixed key accounting in DBMW. - SDBM was sometimes not iterating over unflushed dirty LRU pages. - Fixed wrong DHT value response message format. - Fixed crash when attempting to browse host on a queued source. - Do not route duplicate queries with higher TTL to leaves. - Prevent sending of duplicate (locally issued) OOB-proxied queries. - Fixed startup crash bug on Ubuntu machines. - Changed the Debian menu icon to use the one which is 32x32, as lintian wants. - Fixed auto-restart function on 64-bit Windows. Under the Hood: - [GTK] Darken the color used to display partial results (yellow -> dark gold). - Various PARQ cleanup to smooth QUEUE callback operations. - Fallback to pre-computed symbol file when loaded symbols are garbage. - Relax file_path_set() and open_read() to gracefully handle relative paths. - get_folder_basepath(): protect against unsuitable environment variables. - Recompute the amount of banned fds dynamically as config parameters change. - Detect series of unclaimed OOB hits from a host to ignore further queries. - Changed MUID marking strategy in queries to better accomodate OOB proxying. - Added a UDP TX scheduler to optimize datagram sending by priority. - Enhanced the incremental zlib operations, reusing objects across operations. - Added new official ISO 3166 country codes. - node_read(): was wrongly resizing the message buffer for each message! - Refactored aging table to lower memory footprint (by 6 pointers per entry). - On Windows, keep last 3 stdout/stderr logs, created when launched from GUI. - Send important UDP messages with a "control" priority. - Count TCP push-proxy requests aimed at firewalled-to-firewalled connections. - Patch UDP PUSH messages aimed at initiating firewall-to-firewall transfers. - Count received PUSHes requesting FW-FW transfers, plus those targeting us. - dht_init(): do not reset the KUID if DHT disabled at startup. - Detect whether we are restarting after a clean shutdown or after a crash. - bg_task_terminate(): don't panic at shutdown when handling unaccounted tasks. - Reserve only about 40% of the available virtual memory space on Windows. - Always discover port-mapping devices, even if they won't be used. - Ensure reasonable TTL and hops for PUSH messages from UDP we will route. - The shell "nodes" command now displays the gnet port along with the address. - Added metaconfig check for malloc() superseding. - New switch --disable-malloc added to build.sh to prevent superseding malloc(). - When launching gdb during crash, ask for threads and thread stacks as well. - External IP changes were not waiting for 3 hosts in 3 different CIDR ranges. - Removed too restrive permissions in the man page (COPYRIGHT section). - Shell meta-chars in executable path do not prevent loading symbols via BFD. - Added more DHT statistics. Enjoy! Raphael |
From: Raphael M. <Rap...@po...> - 2012-06-04 22:15:31
|
Dear Gnutella fans, A new minor release has just been uploaded to sourceforge. You may also get it through Gnutella via: magnet:?xt=urn:sha1:EHGW3HFULMJUK2RI3CIHOG7YXEFLMDXO&dn=gtk-gnutella-0.98.3.tar.bz2 Here are the changes since 0.98.2, as listed in the ChangeLog file: # v 0.98.3 2012-06-04 [stable] New Features: - [GTK] Added per-search GUESS statistics line, which can be hidden by users. - [GTK] Display amount of downloads associated with search in the search label. - Added property to control usage of unused Gnutella bandwidth by GUESS. - Added "memory check xmalloc" shell command to monitor the xmalloc freelists. - On Windows, generate a gdb-like stack trace in the crash log file. Improvements: - [GTK] Optimized rendering of main statistics page. - [GTK] Show more accurate message for queued downloads on completed files. - Shell now displays properties with appropriate surrounding type markers. - Limit pongs sent to transient nodes in order to save some bandwidth. - Avoid sending too many pongs on uncompressed connections. - Added README.Windows to document compile instructions for Windows. - Avoid "write() failed: EPIPE" messages from the shell for local client writes. - Added GUESS link cache size to the general statistics pane. - GUESS now uses a dynamically computed outgoing bandwidth limit. - Allow failed TLS connections to be retried without TLS, transparently. - Added "-a" switch to the shell "version" command to display glib/GTK/TLS info. - Added -p switch to the "stats" shell command to pretty-print numbers. - Memory optimization of commonly used data structures to reduce footprint. - Always generate a crashlog file, even when dumping a core. - PARQ: switch actively queued download to another when file has been completed. - Attempt to immediately restart download after failed SHA1 + TTH verification. - At startup, compute TTH if available and SHA1 checking failed. - When switching PARQ 1.0 downloads, switch IDs if queue position is favorable. - Updated translation strings, and fixed French translation. Bug Fixes: - bug #3286824 "Crash at startup / 0.96.9 / FreeBSD AMD64" - Fixed %G formatting bug whereby a zero following a dot would be missed. - Prevent auto-restart when they explicitly request a shutdown. - Fixed grave bugs in the virtual memory layer, some being Windows-specific. - PARQ was not properly computing amortized per-slot time. - Avoid random shell connection failures on Windows. - An un-parseable token in a shell command led to an assertion failure. - Fixed the "alignment optimized" code branch of msort_with_tmp(). - Fixed bad copy-n-paste that could lead to malloc() freelist corruption. - Fixed GUESS corner-case crash when handling an RPC timeout. - [GTK] Avoid crash when user clears the upload statistics (bug #3501181). - On Windows, be smarter when reserving the initial amount of virtual space. - GUESS: always wakeup sleeping queries if we have bandwidth. Under the Hood: - Improved thread-safety of the VMM layer. - Removed perl4-ism in Perl scripts. - Updated IPv4 and IPv6 geo databases. - Attempt to drive a deadlock crash as far as possible to collect debug info. - When logging from another thread (not main), include the small thread ID. - Switched halloc() to xpmalloc() instead of walloc(). - Added thread-private zones for blocks <= 512 bytes for faster allocations. - Optimized access to thread-private information, via a lock-free fast path. - Exit with a zero status when terminating through a regular signal or request. - Some UTF-8 optimizations and low-level fixes. - Also log the faulting PC when we get a harmful signal. - Use the BFD library, if available, to extract symbols from the executable. - Restored ability to have usable stack unwinding on Windows. - Extended crash log information to include full OS name and CPU architecture. - Sort SHA1s in the search.xml file. - Clear whole routing table when switching between Ultra and Leaf modes. - Protect xfree() from algorithmic complexity when handling bursts. - Added xmalloc garbage collector to reclaim fragments from freelist. - Allow the "TLS handshake failed" string to be translated. - Consider IPv4 addresses x.x.x.0 as non-routable. - Now uses own hash table and hash set implementations. - Strengthened entropy collection and ARC4 initial seeding. - Randomly propagate GUESS 0.2 hosts among GUESS 0.2 servents. - Assume we're not firewalled right after initial UPnP or NAT-PMP configuration. - Avoid compiler warnings on Windows. - Make sure random_value() returns uniformly distributed random numbers. - Added ability to filter dumped traffic by IP address. - Changed %F to display whole mantissa before switching to scientific notation. - Ensure memory allocated from the heap is aligned properly. - Show amount of detected CPUs at startup. - Added version numbers to the crash log file name. - Avoid complexity attacks on the hash table. Enjoy! Raphael |
From: Raphael M. <Rap...@po...> - 2011-12-30 16:06:43
|
Dear Gnutella fans, A bug-fixing release has just been uploaded to sourceforge. You may also get it through Gnutella via: magnet:?xt=urn:sha1:VVPJ37FCRZW2SOFN6V2NLHSMZ35WI64M&dn=gtk-gnutella-0.98.2.tar.bz2 This quick re-release after 0.98.1 was made necessary due to problems on recent Ubuntu, where X programs are multi-threaded and our malloc() replacement was not expecting to run under such circumstances. This was also the pretext to finish the IPv6-Ready implementation by adding geo-localization for IPv6 addresses as well. Here are the changes since 0.98.1, as listed in the ChangeLog file: # v 0.98.2 2011-12-30 [stable] This is a minor patch to support systems running latest Ubuntu systems, and maybe others which create multiple threads for GTK programs: our xmalloc() implementation replaces the system's malloc() but it was not safe to use in multi-threaded environments. GUI improvements: - [GTK] Added option to discard results from banned GUIDs (set by default). - [GTK] Display results from servents with a banned GUID in "hot pink". Other improvements: - Updated turkish translation. - Added IPv6 geo-localization database (from Maxmind). - Added dynamic IPv6 hostile support. Enjoy! Raphael |
From: Raphael M. <Rap...@po...> - 2011-12-16 13:14:27
|
Dear Gnutella fans, A bug-fixing release has just been uploaded to sourceforge. You may also get it through Gnutella via: magnet:?xt=urn:sha1:QI64SL6BDGNQXRI7BRCMZJEKJOEKCQ3T&dn=gtk-gnutella-0.98.1.tar.bz2 This quick re-release after 0.98 was made necessary due to glib-2.30.2 which is now playing around with pointers and expects them to be aligned on 8-byte boundaries. Here are the changes since 0.98, as listed in the ChangeLog file: # v 0.98.1 2011-12-16 [stable] This is a minor patch to support systems running glib-2.30.2 and above. Enjoy! Raphael |
From: Raphael M. <Rap...@po...> - 2011-12-11 19:47:04
|
Dear Gnutella fans, A new major release has just been uploaded to sourceforge. You may also get it through Gnutella via: magnet:?xt=urn:sha1:CND63VVQNVN6Y3FURHXHSXMRNZA2IDWF&dn=gtk-gnutella-0.98.tar.bz2 Here are the changes since 0.97.1, as listed in the ChangeLog file: # v 0.98 2011-12-11 [stable] This is a major release, adding "IPv6-Ready" features. It also fixes long-lasting bugs in various areas and contains some other low-level improvements. During the building of this release, Dennis MacAlistair Ritchie passed away. Gtk-gnutella would not exist in its current form without the earlier work of Dennis, the co-inventor of C. This release is dedicated to the memory of that great computer scientist. Farewell, Dennis! New Features: - Added "IPv6-Ready" support. - Enhanced the shell "memory" command to display various allocator stats. - Added the "pid" and "version" shell commands. - Added the "command" shell command to print the server's command line. - Added -r option to "shutdown" shell command to request a restart. - Added the --no-restart and --restart-on-crash gtk-gnutella options. - Added the shell "date" command displaying ISO time with ms accuracy. Improvements: - Ignore Bitzi ticket timeouts on missing entries for explicit user retries. - Added routing table statistics. - GUI: show file creation times for local searches in the info summary. - Optimized page cache coalescing by avoiding two successive binary lookups. - Added -f option to "shutdown" shell command to initiate a fast shutdown. - Allow "echo command | gtk-gnutella --shell" a chance to work on Windows. - Ban duplicate GUIDs to avoid them being the target of PUSH requests. - Updated French translation for 0.98. - Revisited TX stack flow-control logic when there is a compressing layer. - Don't send Hops-Flow messages to nodes not supporting it. - Use full compression for ultra <-> ultra connections. - Internationalization now works on Windows. Bug Fixes: - Fixed harmful cleanup of routing table when cycling over naturally. - Fixed bug in add_file() when adding multiple partial files to a query hit. - Fixed DHT lookup when path protection kicks in and clears the closest node. - Fixed handling of relative position lists, causing unfair PARQ scheduling. - Prevent preferences from being shown from tray icon when already shutdowning, fixing bug #3376952. - Hide tray icon at shutdown time. - Enabled loading of hostiles file on Windows. - Fixed crash on mis-parsed IPv6 address. - Make sure node is still connected before routing its queries. - Avoid crashes when asked to deflate 0 bytes. - Fixed dynamic querying to avoid duplicate messages to probed nodes. - GUESS must forget about query if the query key was not correct. - Do not send translated messages in node handshaking replies. - dualhash_insert_key(): fixed insertion to avoid possible assertion failures. - Avoid wrong "activity timeout" indications for ultra <-> ultra connections. - Make sure we do not include "non-shareable" files in query hits. - Fixed the "node add" and "node drop" shell commands. Under the Hood: - Fixed remote token validation for git versions. - Count and report in statistics the amount of cached GUESS 0.2 hosts. - Fixed improper message queue status computation (warn zone / delay). - XML parser was not handling illegal byte sequences in UTF-8 buffers. - Fixed creation time (GGEP "CT") to send actual filesystem creation time, not the filesystem last modification time. - Enforce configured IP protocols, preventing connection to other protocols. - Added malloc() replacement. - Clear "last dmesh sent" timestamp in uploads when client switches resources. - Construct build date from git's HEAD commit, if available. - Added options to the "shutdown" shell command to trigger the crash handler. - Propagate Windows exception information into the crash log. - On Windows, propagate the PC at which the exception occurs in the crash log. - Force "idle" tasks to be scheduled once in a while. - Increased frequency of the main callout queue heartbeats by 4. - Arrange for a crash log to be generated even when fork() fails. - Loudly warn when string formatting leads to truncation of the message. - Added regression tests for str_vncatf(). - Added floating point formatting routine from Robert G. Burger, allowing str_vncatf() to format floating point numbers natively. - Added Windows startup debugging support and fixed Cygwin startup. - Remap all g_xxx() logging routines to our own message logging layer. - Added "update-potfiles" target to refresh the POTFILES.in list. - Frozen PARQ upload queue slots don't count as "wanted" by the queue. - Added "qhit_bad_debug" property to control logging of bad query hits. - Stack unwinding routines now stop at the first non-text address they reach. - Added dynamic memory usage statistics collection. - Propagate self-assessed symbol quality into the crash log, if not good. - Make sure we open all files in binary mode on Windows. - Packaged regex 0.12 to supply POSIX regcomp() on systems lacking it. - Raise the default number of allowed fds to 2048 on OS X. - Added SDBM testing and benchmarking program. - Don't publish NOPE entries in the DHT for nodes with a bad GUID. - Added "tx_deflate_debug" and "tx_debug_addrs" properties. - TX deflating layer can postpone Nagle flushing up to 2 seconds. - Updated Geo IP database. Enjoy! Raphael |
From: Raphael M. <Rap...@po...> - 2011-09-11 19:48:21
|
Dear Gnutella fans, A new major release has just been uploaded to sourceforge. You may also get it through Gnutella via: magnet:?xt=urn:sha1:CSSLL7MMGXF62RB6TGL6KXSEVL52AWIG&dn=gtk-gnutella-0.97.1.tar.bz2 Here are the changes since 0.97, as listed in the ChangeLog file: # v 0.97.1 2011-09-11 [stable] This is a bug-fixing release, addressing critical bugs that slipped through in the 0.97 release but which happen only in particular conditions. The project also switched from SVN to git. This affects the version number which no longer includes a single SVN revision but instead uses the combination of a counter for the number of changes since the last release plus git's abbreviated commit ID. Bug Fixes: - Fixed bootstrapping problems on IPv6 enabled hosts [bug #3376322]. - Forgot to clear global HTTP handle on GHC errors [bug #376322]. - Typo caused crash when processing alternate locations in firewalled mode with PFSP enabled. - Forgot to clear pending THEX downloads on download stops. - Make sure we remove the SHA1 of de-indexed files from the shared set. - Handle "message too large" errors when sending on UDP. Under the Hood: - When running as ultra node, use GUESS introduction pings when requesting a query key so that the remote ultrapeer can passively discover us. - Do not count GUID collisions with our own GUID when we see our own IP:port! - Added some gcc 4.6 "hot" / "cold" routine tagging for better optimizations. - netmask_to_cidr(): was not using the proper metaconfig symbol to activate the usage of __builtin_popcount. - Updated build.sh to build an app bundle for OSX with target=osxbundle - Added "dmg" to the default extension list for shared files. - Added OS X integration support: menu bar is now on the OS menubar on top, the application does a clean exit on cmd-q and the application continues to run when only the window is closed. - Use the downloads folder on Windows 7 and Vista for completed downloads. - Updated the geographic IP mapping database. - Integrated spell check of the French translation from ste...@gm.... - Turned "zalloc_always_gc" to FALSE by default. Enjoy! Raphael |