Skip to content

Releases: kotauskas/interprocess

2.4.0

22 Feb 23:04
2.4.0
41facdd

Choose a tag to compare

General

  • Concurrency prevention for local sockets has been removed. It is now possible to perform I/O on the same local socket stream from multiple threads at once without encountering any panics.
  • split on local socket streams has been soft-deprecated due to being identical in functionality and performance characteristics to putting the local socket stream into an Rc or Arc. Deprecation warnings will not be emitted for programs that use split, but replacing it with Rc or Arc is preferred.
  • peer_pid is back in style: local socket streams now have a peer_creds method that returns the credentials of the other side of the connection. Those include the process ID, effective user and group ID, and list of supplementary groups.

Windows

  • Fixed an embarrassing memory leak in the linger pool. Versions 2.3.0 and 2.3.1 would leak a small amount of memory for every Tokio-based stream lingered.
  • Fixed a benign use-after-free bug in MaybeArc::try_make_owned (called in reunite) that was introduced in version 2.0.0. To my knowledge, it is not possible to trigger undefined behavior from safe code using this bug.
  • Synchronous named pipes now use overlapped I/O, just like Tokio-based ones. This allows for concurrent I/O operations on the same stream as described in General. Thanks to Sebastian Schöner for his blog post that prompted me to carefully reread Microsoft documentation and guided me toward the solution!
  • All owned handles now provide one sentinel value for niche optimization (via NonZeroIsize, since 0 is not a valid handle value).

2.3.1

07 Feb 16:46
2.3.1
bd41b10

Choose a tag to compare

  • Fixed the build failure on 32-bit Unix systems caused by an assumption that the type of tv_nsec in struct timespec implements From<u32>, which is not the case on 32-bit Linux, where that field is signed.

2.3.0

04 Feb 19:27
2.3.0
f91c5fd

Choose a tag to compare

General

  • Now licensed under the 0-clause BSD license.
  • Added local_socket::ListenerOptions::try_overwrite to streamline the common case of dealing with "address in use" errors.
  • Added local_socket::ConnectOptions, allowing clients to specify the connection timeout and make use of zero-cost nonblocking mode enablement.
  • Local socket implementation wrappers now have accessors for their underlying implementations (os::unix::uds_local_socket::Stream::inner, os::windows::named_pipe::local_socket::Stream::inner, and so on).
  • A neat little tool, inspect-platform, has been added to help investigate the behavior of platforms that Interprocess has previously not been ported to.
  • Miscellaneous improvements to documentation and examples.

Windows

  • Added AsSecurityDescriptorExt::write_to_security_attributes_ptr to work around windows-sys version churn (see #84).
  • Unnamed pipes are now inheritable. Previously, they were documented as such, but defaulted to not being inheritable due to a typo.
  • os::windows::named_pipe::tokio::PipeListenerOptionsExt has been deprecated in favor of inherent methods fulfilling the same function. The deprecation warning can be fixed by simply removing the import.
  • Fixed panic when dropping Tokio-based Windows named pipes outside of a Tokio runtime (#71) by replacing the old "limbo" with a new linger pool, used both for sync named pipes and for Tokio ones. This new implementation is more efficient and more maintainable.
    • The aforementioned bug now has test coverage.
  • Fixed handling of dead-on-arrival conections (#86).

Unix

  • SpecialDirUdSocket is now deprecated due to complicated and potentially undesirable fallback behavior.
    • Name types for more specific special directories, such as "current user only" (/run/user/<uid>), "world-writable" (/tmp), "root-writable and world-readable" (/run) will be added in a future version.
  • ListenerOptionsExt::mode has been improved:
    • The umask fallback has been removed – the method will now return ErrorKind::Unsupported on platforms on which the mode of a Unix domain socket listener cannot be changed atomically.
    • The documentation now more accurately describes the behavior of non-default modes on different platforms.
  • set_nonblocking methods now use FIONBIO on Linux to reduce the number of system calls. Additionally, some superfluous fcntl(F_GETFL) calls have been optimized out on other platforms.
  • Unix domain socket address handling has been refactored to be more efficient.
  • NetBSD has been promoted from Support by association to Explicit support without CI.

2.2.3

07 Mar 13:11
2.2.3
71921a6

Choose a tag to compare

2.2.2 – fix for Android

07 Mar 13:08
2.2.2
033ee88

Choose a tag to compare

Fixes the build on Android.

2.2.1

21 Jul 18:29
2.2.1
9f743d5

Choose a tag to compare

Reverted the change from hardcoded /tmp to $TMPDIR for SpecialDirUdSocket on non-Android platforms. On Android, the hardcoded path is now /data/local/tmp.

2.2.0 – Tokio unnamed pipes

13 Jun 11:36
2.2.0
050ae2e

Choose a tag to compare

  • Tokio-based unnamed pipes, with subpar performance on Windows due to OS API limitations
  • Examples for unnamed pipes, both non-async and Tokio
  • Impersonation for Windows named pipes
  • Improvements to the implementation of Windows pipe flushing on Tokio

2.1.1

23 May 09:50
2.1.1
a9ad570

Choose a tag to compare

  • Removed async Incoming and futures::Stream ("AsyncIterator") implementations on local_socket::traits::Listener implementors – those were actually completely broken, so this change is not breaking in practice and thus does not warrant a bump to 3.0.0
  • Fixed ListenerOptionsExt::mode() behavior in umask fallback mode and improved its documentation
  • Moved examples to their own dedicated files with the help of the doctest-file crate

2.1.0 – listeners are now iterators

08 May 13:39
2.1.0
b79d363

Choose a tag to compare

  • Fixes #49
  • Adds Iterator impl on local socket listeners (closes #64)
  • Miscellaneous documentation fixes

2.0.1 – fix for non-x86 platforms

04 May 21:53
2.0.1
6ca63d2

Choose a tag to compare

  • Fixed a portability bug that broke the build on Android (#62, #63)
  • Minor documentation adjustments