summaryrefslogtreecommitdiff
path: root/src/platform/windows
Commit message (Collapse)AuthorAge
* fixes #1210 Undefined reference to InterlockedAddNoFence (mingw64)Garrett D'Amore2020-02-26
|
* XREQ and others race on TTL.Garrett D'Amore2020-01-11
| | | | | | | | | | The TTL in these cases should have been atomic. To facilitate things we actually introduce an atomic int for convenience. We also introduce a convenience nni_msg_must_append_u32() and nni_msg_header_must_append_u32(), so that we can eliminate some failure tests that cannot ever happen. Combined with a new test for xreq, we have 100% coverage for xreq and more coverage for the other REQ/REP protocols.
* fixes #1105 pollable can be inlined, and use atomicsGarrett D'Amore2020-01-04
| | | | | This also introduces an nni_atomic_cas64 to help with lock-free designs. Some mechanical renaming was done in some of the protocols for spelling.
* Fixes broken win32 build. (#1092)Cody Piersall2020-01-02
| | | | | | When using the 32-bit Windows compiler, the functions InterlockedIncrementAcquire64() and and InterlockedDecrementRelease64() are not defined. So we fall back to the more generic InterlockedAcquire64() and InterlockedDecrement64() on 32-bit Windows.
* fixes #1083 Random number improvementsGarrett D'Amore2020-01-01
|
* Fixup a few codacy complaints.Garrett D'Amore2020-01-01
|
* fixes #1079 Use after free panic in tcp_dialerGarrett D'Amore2019-12-30
|
* fixes #1075 WebSocket heap use after freeGarrett D'Amore2019-12-30
| | | | | This also introduces a new atomic boolean type, so we can use that to trigger whether we've added the HTTP handler or not.
* fixes #1065 resolver leaks work structuresGarrett D'Amore2019-12-29
| | | | | | This includes changes to support setting the sanitizer *correctly* (the old code CMake stuff didn't quite get it right), and addresses a number of failures in the test code found by the address sanitizer.
* fixes #1062 Windows client connections cannot get NNG_OPT_LOCADDRGarrett D'Amore2019-12-28
|
* fixes #1051 nni_ntop is unusedGarrett D'Amore2019-12-27
|
* fixes #970 TCP connections through docker-proxy do not reconnectGarrett D'Amore2019-09-24
|
* fixes #987 Memory leak in ipc_dialer_dial (Windows)Garrett D'Amore2019-09-23
|
* MinGW fixes for interlocked variablesGarrett D'Amore2019-06-27
|
* fix #946 Use after free in TLSGarrett D'Amore2019-05-19
| | | | | This also introduces a more efficient reference counting usage based on atomics, rather than locks.
* Introduce nni_plat_printf()Garrett D'Amore2019-05-07
| | | | | This permits the stats dump to avoid some extra buffering, and resolves a complaint about possible format buffer overruns.
* fixes #901 shorter option get/set functions for all typesJake Woltersdorf2019-04-07
| | | | | | | | | | | | - Renamed internal nng_*_getx/setx methods with "nni" prefix - Moved stream get/set option definition macros to options.h and added "NNI_" prefix - "_PTR" variant of get/set option definition macros is for when first arg is passed as pointer (`nng_stream *s` vs `nng_pipe s`) - New get/set option functions for `nng_socket` are `nng_socket_get_X` eschewing the previous `nng_getopt` pattern - Macro-fy legacy getopt/setopt and implement in terms of "new" API - nng_setopt* use "new" shorter API. Add missing uint64 set functions. - Shorter get/set option functions get own man page and old getopt/setopt link to them - Built with -DNNG_ENABLE_DOC=ON and part of central libnng index - Update copyright
* fixes #890 Windows mingw interlocked exchange not quite rightGarrett D'Amore2019-02-23
|
* fixes #879 Desire NNG_OPT_TCP_BOUND_PORTGarrett D'Amore2019-02-16
| | | | | | We also have made some support changes, including new APIs for printing URLs, and some improvements to the NNG_OPT_URL to make use of this new property.
* fixes #872 create unified nng_stream APIGarrett D'Amore2019-02-16
| | | | | | | | | This is a major change, and includes changes to use a polymorphic stream API for all transports. There have been related bugs fixed along the way. Additionally the man pages have changed. The old non-polymorphic APIs are removed now. This is a breaking change, but the old APIs were never part of any released public API.
* Fix bug #868Alexander Pickering2019-02-15
| | | | | | Define a InterlockedAddNoFence64() function using gcc's atomics on mingw(32|64) (https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html)
* fixes #853 Move IPC options to nng.hGarrett D'Amore2019-01-06
|
* fixes #839 TCP listener_start API should use constant sockaddrGarrett D'Amore2019-01-06
|
* fixes #825 TCP public API should use generic setopt/getoptGarrett D'Amore2018-12-31
| | | | | | | | | | | | This changes much of the internal API for TCP option handling, and includes hooks for some of this in various consumers. Note that the consumers still need to have additional work done to complete them, which will be part of providing public "raw" TLS and WebSocket APIs. We would also like to finish addressing the call sites of nni_tcp_listener_start() that assume the sockaddr is modified -- it would be superior to use the NNG_OPT_LOCADDR option. Thaat will be addressed in a follow up PR.
* progress on IPC endpointsGarrett D'Amore2018-12-29
|
* IPC option rework (pipe/conn) to reduce code duplication.Garrett D'Amore2018-12-29
|
* fixes #823 Define public IPC (#824)Garrett D'Amore2018-12-22
| | | | | | | This introduces a basic IPC API, modeled on the TCP API, for direct access. Only connection options are exposed at present -- we need to add options for dialers and listeners (and particularly listener settings for permissions and security attributes.) Documentation is still outstanding, but a very limited test suite exists.
* fixes #769 How to limit worker threadsMatt Gigli2018-12-16
| | | | | * Expose cmake variable to set number of DNS resolver threads: NNG_RESOLV_CONCURRENCY * Expose cmake variable to set number of taskq threads: NNG_NUM_TASKQ_THREADS
* Fix win file type (#749)Hunter2018-10-12
| | | | | before: nni_file_is_dir with path D:\\ D:/ D: all returns false after: nni_file_is_dir with path D:\\ D:/ D: all returns true
* fixes #712 windows nni_atomic_set64 should not return valueGarrett D'Amore2018-09-09
|
* fixes #674 want 64-bit atomics (for stats)Garrett D'Amore2018-08-27
|
* fixes #608 Add TCP support to specify local network interfaceGarrett D'Amore2018-08-27
| | | | | This also fixes a leaked TCP connection on a failure path, which we noticed while working this change.
* fixes #668 Remove the old win_event stuffGarrett D'Amore2018-08-20
|
* fixes #665 Convert Windows UDP to raw IOCPGarrett D'Amore2018-08-20
|
* fixes #664 aio cancellation could be betterGarrett D'Amore2018-08-20
| | | | | | | | | This changes the signature of the aio cancellation routines to take the argument for cancellation directly, so we do not need to lookup the argument using the nni_aio_get_prov_data. We should probably consider eliminating nni_aio_get_prov_data, and co, and changing the prov_extra to reflect prov_data. Later.
* fixes #611 Memory Leaks under WindowsGarrett D'Amore2018-08-06
| | | | | | | | | | | | | fixes #622 incorrect assumptions about malloc(0) Windows actually allocates an object of size zero when calling malloc on size zero. This is unusual behavior, and we just add logic to work more like malloc on POSIX systems. Other systems can return non-NULL objects to fixed pages here. We think the best option here is to uniformly return NULL from our APIs in these circumstances, and to include testing to validate that.
* fixes #605 NNI_ALLOC_STRUCT/NNI_ALLOC_STRUCTS should zero memoryGarrett D'Amore2018-07-24
|
* Modified code to explicitly set hints.ai_socktype passed to getaddrinfo(). ↵Mike Bush2018-07-24
| | | | On QNX, specifying a numeric servname while leaving ai_socktype unspecified would result in EAI_SERVICE.
* fixes #595 mutex leak and other minor errors in TCPGarrett D'Amore2018-07-18
| | | | | | | | | | | | | | | | fixes #596 POSIX IPC should move away from pipedesc/epdesc fixes #598 TLS and TCP listeners could support NNG_OPT_LOCADDR fixes #594 Windows IPC should use "new style" win_io code. fixes #597 macOS could support PEER PID This large change set cleans up the IPC support on Windows and POSIX. This has the beneficial impact of significantly reducing the complexity of the code, reducing locking, increasing concurrency (multiple dial and accepts can be outstanding now), reducing context switches (we complete thins synchronously now). While here we have added some missing option support, and fixed a few more bugs that we found in the TCP code changes from last week.
* fixes #591 incorrect reuse of server instances by websocketGarrett D'Amore2018-07-16
| | | | | This also arranges for server shutdown to be handled using the reaper, leading to more elegant cleanup.
* fixes #523 dialers could support multiple outstanding dial requestsGarrett D'Amore2018-07-16
| | | | | | | | | | | | | | | | | | | | | | | | fixes #179 DNS resolution should be done at connect time fixes #586 Windows IO completion port work could be better fixes #339 Windows iocp could use synchronous completions fixes #280 TCP abstraction improvements This is a rather monstrous set of changes, which refactors TCP, and the underlying Windows I/O completion path logic, in order to obtain a cleaner, simpler API, with support for asynchronous DNS lookups performed on connect rather than initialization time, the ability to have multiple connects or accepts pending, as well as fewer extraneous function calls. The Windows code also benefits from greatly reduced context switching, fewer lock operations performed, and a reduced number of system calls on the hot code path. (We use automatic event resetting instead of manual.) Some dead code was removed as well, and a few potential edge case leaks on failure paths (in the websocket code) were plugged. Note that all TCP based transports benefit from this work. The IPC code on Windows still uses the legacy IOCP for now, as does the UDP code (used for ZeroTier.) We will be converting those soon too.
* fixes #566 Windows iov resubmit routine is not used.Garrett D'Amore2018-07-06
|
* fixes #572 Several locking errors foundGarrett D'Amore2018-07-03
| | | | | | | | | | fixes #573 atomic flags could help This introduces a new atomic flag, and reduces some of the global locking. The lock refactoring work is not yet complete, but this is a positive step forward, and should help with certain things. While here we also fixed a compile warning due to incorrect types.
* fixes #32 autoscale based on CPUs availableGarrett D'Amore2018-06-12
| | | | | | This should work on both Windows and the most common POSIX variants. We will create at least two threads for running completions, but there are numerous other threads in the code.
* fixes #499 Eliminate the unused nni_plat_home_dir...Garrett D'Amore2018-05-30
|
* fixes #471 Linux resolver truncates port number silentlyGarrett D'Amore2018-05-21
|
* fixes #451 task finalization could be better/smarter (resolver)Garrett D'Amore2018-05-17
| | | | | | | | | | | | | | | | | | | | | | | This changes nni_task_fini to always run synchronously, waiting for the task to finish before cleaning up. Much simpler code. Additionally, we've refactored the resolver code to avoid the use of taskqs, which added complexity and inefficiency. The approach of just allocating its own threads and a work queue to process them turns out to be vastly simpler, and actually reduces extra allocations and context switches. wip POSIX resolv threads. (Taskqs are just overhead and complexity here.) Windows resolver changes. Task cleanup. fix up windows mutex.
* fixes #430 Unable to build in MSYS + Win-buildsGarrett D'Amore2018-05-15
| | | | fixes #438 Consider dropping AI_V4MAPPED
* fixes #352 aio lock is burning hotGarrett D'Amore2018-05-14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | fixes #326 consider nni_taskq_exec_synch() fixes #410 kqueue implementation could be smarter fixes #411 epoll_implementation could be smarter fixes #426 synchronous completion can lead to panic fixes #421 pipe close race condition/duplicate destroy This is a major refactoring of two significant parts of the code base, which are closely interrelated. First the aio and taskq framework have undergone a number of simplifications, and improvements. We have ditched a few parts of the internal API (for example tasks no longer support cancellation) that weren't terribly useful but added a lot of complexity, and we've made aio_schedule something that now checks for cancellation or other "premature" completions. The aio framework now uses the tasks more tightly, so that aio wait can devolve into just nni_task_wait(). We did have to add a "task_prep()" step to prevent race conditions. Second, the entire POSIX poller framework has been simplified, and made more robust, and more scalable. There were some fairly inherent race conditions around the shutdown/close code, where we *thought* we were synchronizing against the other thread, but weren't doing so adequately. With a cleaner design, we've been able to tighten up the implementation to remove these race conditions, while substantially reducing the chance for lock contention, thereby improving scalability. The illumos poller also got a performance boost by polling for multiple events. In highly "busy" systems, we expect to see vast reductions in lock contention, and therefore greater scalability, in addition to overall improved reliability. One area where we currently can do better is that there is still only a single poller thread run. Scaling this out is a task that has to be done differently for each poller, and carefuly to ensure that close conditions are safe on all pollers, and that no chance for deadlock/livelock waiting for pfd finalizers can occur.
* fixes #383 Would like peerid for IPCGarrett D'Amore2018-05-03
| | | | | We offer uid, gid, process id, and even zone id where we have them. Docs and tests are provided.