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 _______________________________________________ gtk-gnutella-devel mailing list gtk-gnutella-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gtk-gnutella-devel