summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAge
* Bump version to 0.9.0.0.9.0Garrett D'Amore2018-04-24
|
* Document context support for surveyor.Garrett D'Amore2018-04-24
|
* fix a number of cppcheck complaints (not all)Garrett D'Amore2018-04-24
|
* Eliminate unused varable.Garrett D'Amore2018-04-24
|
* fixes #367 Kill off Travis CI finallyGarrett D'Amore2018-04-24
|
* fixes #366 Cache ninja-build for AppVeyorGarrett D'Amore2018-04-24
| | | | fixes #365 Probably we don't need asciidoctor at build time
* fixes #364 kill off nni_msgq_set_best_effort()Garrett D'Amore2018-04-24
|
* fixes #342 Want Surveyor/Respondent context supportGarrett D'Amore2018-04-24
| | | | | | | | | | | | | | | | fixes #360 core should nng_aio_begin before nng_aio_finish_error fixes #361 nng_send_aio should check for NULL message fixes #362 nni_msgq does not signal pollable on certain events This adds support for contexts for both sides of the surveyor pattern. Prior to this commit, the raw mode was completely broken, and there were numerous other bugs found and fixed. This integration includes *much* deeper validation of this pattern. Some changes to the core and other patterns have been made, where it was obvioius that we could make such improvements. (The obviousness stemming from the fact that RESPONDENT in particular is very closely derived from REP.)
* fixes #368 context options could be emptyGarrett D'Amore2018-04-24
|
* fixes #363 context option plumbing missingGarrett D'Amore2018-04-24
|
* fixes #346 nng_recv() sometimes acts on null `msg` pointerGarrett D'Amore2018-04-20
| | | | | | | | | | | | | | | | | | | | | | | | | | | This closes a fundamental flaw in the way aio structures were handled. In paticular, aio expiration could race ahead, and fire before the aio was properly registered by the provider. This ultimately led to the possibility of duplicate completions on the same aio. The solution involved breaking up nni_aio_start into two functions. nni_aio_begin (which can be run outside of external locks) simply validates that nni_aio_fini() has not been called, and clears certain fields in the aio to make it ready for use by the provider. nni_aio_schedule does the work to register the aio with the expiration thread, and should only be called when the aio is actually scheduled for asynchronous completion. nni_aio_schedule_verify does the same thing, but returns NNG_ETIMEDOUT if the aio has a zero length timeout. This change has a small negative performance impact. We have plans to rectify that by converting nni_aio_begin to use a locklesss flag for the aio->a_fini bit. While we were here, we fixed some error paths in the POSIX subsystem, which would have returned incorrect error codes, and we made some optmizations in the message queues to reduce conditionals while holding locks in the hot code path.
* fixes #355 Possible use after free in REPGarrett D'Amore2018-04-17
| | | | | | | | | While here I've added some code that should help us backtrack on a crash, by linking back to the pipe from the context when we are queued on that pipes sendq. I'm not sure if we've ever seen these or not, but it could explain certain infrequent crashes we think we've seen.
* fixes #344 nn_poll() legacy API missingGarrett D'Amore2018-04-16
| | | | | | | | | | | | This includes the test from legacy libnanomsg and a man page. We have refactored the message queue notification system so that it uses nni_pollable, leading we hope to a more consistent system, and reducing the code size and complexity. We also fixed the size of the NN_RCVFD and NN_SNDFD so that they are a SOCKET on Windows systems, rather than an integer. This addresses 64-bit compilation problems.
* fixes #350 Incorrect compat error code from nn_setsockoptGarrett D'Amore2018-04-14
|
* Fix socket option levels (compat options).Garrett D'Amore2018-04-14
|
* fixes bad address tests in tcp and tls (#345)toppk2018-04-14
| | | | | | | * 127.0.0.1.32 is treated as a hostname, returns EAI_NODATA on my fedora 27 box * since this is not in POSIX, and deprecated from some libc resolvers protect with an ifdef
* fixes #308 Close can blockGarrett D'Amore2018-04-14
| | | | | | | | | | | | | | | | | | | | Ultimately, this just removes the support for lingering altogether. Based on prior experience, lingering has always been unreliable, and was removed in legacy libnanomsg ages ago. The problem is that operating system support for lingering is very inconsistent at best, and for some transports the very concept is somewhat meaningless. Making things worse, we were never able to adequately capture an exit() event from another thread -- so lingering was always a false promise. Applications that need to be sure that messages are delivered should either include an ack in their protocol, use req/rep (which has an ack), or inject a suitable delay of their own. For things going over local networks, an extra delay of 100 msec should be sufficient *most of the time*.
* fixes #303 Flesh out compatible API docsGarrett D'Amore2018-04-14
|
* Remove some unused variables.Garrett D'Amore2018-04-12
|
* Use contexts for new async demo.Garrett D'Amore2018-04-12
|
* icons for github.Garrett D'Amore2018-04-12
|
* Minor cross reference fixes for v0.8.0.Garrett D'Amore2018-04-12
|
* Bump version to 0.8.0.0.8.0Garrett D'Amore2018-04-12
|
* fixes #341 Want REST API gateway demoGarrett D'Amore2018-04-11
|
* We need to declare the TLS structure here.Garrett D'Amore2018-04-11
| | | | | Applications which may not even be using TLS should not have to know about the TLS configuration structure.
* Minor format fix for raw mode header.Garrett D'Amore2018-04-11
|
* Update doc with information about contexts.Garrett D'Amore2018-04-10
|
* fixes #338 possible SIGPIPE on LinuxGarrett D'Amore2018-04-10
|
* Fix valgrind warning in assert.Garrett D'Amore2018-04-10
| | | | | | | This technically doesn't need the lock, as we're only trying to catch a possible problem during development rather than in the field (and this should never occur), but the false positive in valgrind obscures other possible errors, so leave it in the lock.
* Eliminate possible data race on file descriptor.Garrett D'Amore2018-04-10
| | | | Turns out that shutdown is sufficient for most needs.
* Add new reqstress test.Garrett D'Amore2018-04-10
|
* fix unused variable in nngcat.Garrett D'Amore2018-04-10
|
* fixes #336 inproc queue depths are too longGarrett D'Amore2018-04-10
|
* fixes #337 compat_reqrep test too fragileGarrett D'Amore2018-04-10
|
* fixes #334 Separate context for state machines from socketsGarrett D'Amore2018-04-10
| | | | | | | | | | | | | | | This provides context support for REQ and REP sockets. More discussion around this is in the issue itself. Optionally we would like to extend this to the surveyor pattern. Note that we specifically do not support pollable descriptors for non-default contexts, and the results of using file descriptors for polling (NNG_OPT_SENDFD and NNG_OPT_RECVFD) is undefined. In the future, it might be nice to figure out how to factor in optional use of a message queue for users who want more buffering, but we think there is little need for this with cooked mode.
* fixes #335 eventfd seems unreliable on Linux (Ubuntu 17.10)Garrett D'Amore2018-04-09
|
* fixes #331 replace NNG_OPT_RAW option with constructorGarrett D'Amore2018-04-04
| | | | | | | | | | | | | This makes the raw mode something that is immutable, determined at socket construction. This is an enabling change for the separate context support coming soon. As a result, this is an API breaking change for users of the raw mode option (NNG_OPT_RAW). There aren't many of them out there. Cooked mode is entirely unaffected. There are changes to tests and documentation included.
* fixes #329 type checking not done for setoptGarrett D'Amore2018-04-04
|
* fixes #324 nni_aio_set_synch leads to race conditionGarrett D'Amore2018-04-04
| | | | | | | | fixes #325 synchronous aio completion crash fixes #327 move nni_clock() operations to outside the nni_aio_lk. This work was done for the context tree, and is necessary to properly enable that branch.
* fixes #312 idhash_walk stuff can be removedGarrett D'Amore2018-03-30
|
* fixes #323 aio's iov may be reusedGarrett D'Amore2018-03-30
|
* fixes #322 epoll implementation is racyGarrett D'Amore2018-03-30
| | | | | This uses numeric identifiers and an idhash table to make sure that the values we get back are still use.
* fixes #315 WebSocket message handling errorsGarrett D'Amore2018-03-30
| | | | | This also gives a performance benefit to WebSocket, by making the completion logic run synchronously.
* If timeout is NNG_TIME_NEVER, then simply deschedule.Garrett D'Amore2018-03-30
|
* fixes #317 TLS, TCP, and IPC should support multiple outstanding opsGarrett D'Amore2018-03-30
| | | | | | | | | | | | | | | | | | | | | | | | fixes #22 Consider using synchronous completions sometimes Transport improvements for IPC, TCP, and TLS. This change does three things. First it permits multiple outstanding receives or sends on the transport. This change is being made to accomodate some other changes in the protocols where it might be advantageous to post send or receives directly against the transport pipe without going through another level of indirection. Second, it changes the normal completions to be performed synchronously. This translates into a rather major performance improvement, reducing latency by some 27%, and thereby improving performance altogether. (This elminates two extra context switches per transaction!) FInally, we can save some extra checks and conditions because we know that completions cannot happen if we don't have a pending operation (we no longer complete out of sequence), and we only call the dosend operation when we have something to send. This can eliminate some pipeline stalls.
* fixes #316 nni_aio_set_synch() usually doesn't do anythingGarrett D'Amore2018-03-30
|
* Include a tip about service naming guidelines.Garrett D'Amore2018-03-30
|
* fixes #318 Assertion on macOS -- kevent() returns EINPROGRESS.Garrett D'Amore2018-03-30
|
* Need to create zt home for dialerJanjaap Bos2018-03-23
|
* Add documentation for supplemental functions.Garrett D'Amore2018-03-22
| | | | | | This includes platform portability stuff like mutexes and threads, etc. While here we fixed a problem with nng_opts_parse and we addressed the type of the platform API.