summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2014-07-17shared: add generic IPC barrierDavid Herrmann
The "Barrier" object is a simple inter-process barrier implementation. It allows placing synchronization points and waiting for the other side to reach it. Additionally, it has an abortion-mechanism as second-layer synchronization to send abortion-events asynchronously to the other side. The API is usually used to synchronize processes during fork(). However, it can be extended to pass state through execve() so you could synchronize beyond execve(). Usually, it's used like this (error-handling replaced by assert() for simplicity): Barrier b; r = barrier_init(&b); assert_se(r >= 0); pid = fork(); assert_se(pid >= 0); if (pid == 0) { barrier_set_role(&b, BARRIER_CHILD); ...do child post-setup... if (CHILD_SETUP_FAILED) exit(1); ...child setup done... barrier_place(&b); if (!barrier_sync(&b)) { /* parent setup failed */ exit(1); } barrier_destroy(&b); /* redundant as execve() and exit() imply this */ /* parent & child setup successful */ execve(...); } barrier_set_role(&b, BARRIER_PARENT); ...do parent post-setup... if (PARENT_SETUP_FAILED) { barrier_abort(&b); /* send abortion event */ barrier_wait_abortion(&b); /* wait for child to abort (exit() implies abortion) */ barrier_destroy(&b); ...bail out... } ...parent setup done... barrier_place(&b); if (!barrier_sync(&b)) { ...child setup failed... ; barrier_destroy(&b); ...bail out... } barrier_destroy(&b); ...child setup successfull... This is the most basic API. Using barrier_place() to place barriers and barrier_sync() to perform a full synchronization between both processes. barrier_abort() places an abortion barrier which superceeds any other barriers, exit() (or barrier_destroy()) places an abortion-barrier that queues behind existing barriers (thus *not* replacing existing barriers unlike barrier_abort()). This example uses hard-synchronization with wait_abortion(), sync() and friends. These are all optional. Barriers are highly dynamic and can be used for one-way synchronization or even no synchronization at all (postponing it for later). The sync() call performs a full two-way synchronization. The API is documented and should be fairly self-explanatory. A test-suite shows some special semantics regarding abortion, wait_next() and exit(). Internally, barriers use two eventfds and a pipe. The pipe is used to detect exit()s of the remote side as eventfds do not allow that. The eventfds are used to place barriers, one for each side. Barriers itself are numbered, but the numbers are reused once both sides reached the same barrier, thus you cannot address barriers by the index. Moreover, the numbering is implicit and we only store a counter. This makes the implementation itself very lightweight, which is probably negligible considering that we need 3 FDs for a barrier.. Last but not least: This barrier implementation is quite heavy. It's definitely not meant for fast IPC synchronization. However, it's very easy to use. And given the *HUGE* overhead of fork(), the barrier-overhead should be negligible.
2014-07-16core: nicer message when inotify watches are exhaustedZbigniew Jędrzejewski-Szmek
inotify_add_watch returns ENOSPC, which translates to "No space left on device", which is misleading. https://bugs.freedesktop.org/show_bug.cgi?id=73628
2014-07-17resolved: enforce limit on concurrent outstanding queriesLennart Poettering
2014-07-17sd-login: always use "indices" as plural of "index"Lennart Poettering
So far both "indexes" and "indices" was used. Let's clean this up, and stick to indices, since it appears to be used more frequently.
2014-07-17sd-network: rename "index" parameter to "ifindex"Lennart Poettering
makes things a bit clearer and avoids any clashes with libc's index() symbol.
2014-07-17sd-network: if a boolean is mising, we should just take it as falseLennart Poettering
That way, we can deprecate fields later on without problems
2014-07-17sd-network: remove redundant array size parameter from functions that return ↵Lennart Poettering
arrays As long as the number of array entries is relatively small it's nicer to simply return the number of entries directly, instead of using a size_t* return parameter for it.
2014-07-17resolved: fix check for mdns namesLennart Poettering
2014-07-17resolved: we are never authoritative for localhostLennart Poettering
2014-07-17resolved: properly handle MTU logicLennart Poettering
2014-07-17dns-domain: enforce maximum DNS domain name lengthLennart Poettering
2014-07-17sd-network: fix parameter order for sd_network_monitor_new()Lennart Poettering
Constructors should return the object they created as first parameter, except when they are generated as a child/member object of some other object in which case that should be first.
2014-07-16journal/verify: flush progress bar, print offset in more placesZbigniew Jędrzejewski-Szmek
Before, fragments of the progress bar would remain when errors or warnings were printed.
2014-07-16test-tables: add new entriesZbigniew Jędrzejewski-Szmek
One missing string found. A few things had to be moved around to make it possible to test them.
2014-07-16tty-ask-password-agent: modernizationZbigniew Jędrzejewski-Szmek
2014-07-16Be more careful when checking for empty filesZbigniew Jędrzejewski-Szmek
If we want to avoid reading a totally empty file, it seems better to check after we have opened the file, not before.
2014-07-16Let config_parse open file where applicableZbigniew Jędrzejewski-Szmek
Special care is needed so that we get an error message if the file failed to parse, but not when it is missing. To avoid duplicating the same error check in every caller, add an additional 'warn' boolean to tell config_parse whether a message should be issued. This makes things both shorter and more robust wrt. to error reporting.
2014-07-16resolved: do not free() sd_dhcp_lease_get_dns() resultsKay Sievers
2014-07-16resolved: properly pass canonical name information to resolving clientLennart Poettering
Also, hook up nss-resolve to make use of this information
2014-07-16resolved: add CNAME lookup supportLennart Poettering
2014-07-16missing.h: add IFLA_MACVLAN_FLAGSZbigniew Jędrzejewski-Szmek
Now we are getting into kernel < 3.4 territory... https://bugs.freedesktop.org/show_bug.cgi?id=80095
2014-07-16resolved: support for TCP DNS queriesLennart Poettering
2014-07-16dns-packet: allow dynamic resizing of DNS packetsLennart Poettering
2014-07-16dns-domain: introduce macros for accessing all DNS header fieldsLennart Poettering
2014-07-16journal-remote: remove obsolete variableZbigniew Jędrzejewski-Szmek
2014-07-16journal-remote: fix double typedef and add missing headerZbigniew Jędrzejewski-Szmek
2014-07-16shared: include stdbool.h in mkdir.hSjoerd Simons
2014-07-16test-compress-benchmark: add missing % before PRIu64 formatThomas Hindoe Paaboel Andersen
2014-07-16test-socket-util: silence warningsThomas Hindoe Paaboel Andersen
2014-07-15resolve: avoid use of uninitalized variableZbigniew Jędrzejewski-Szmek
2014-07-15test-compress-benchmark: silence warningsMarc-Antoine Perennou
and btw make it pass for 32bits where size_t != uint64_t
2014-07-15journal-remote: avoid copying input dataZbigniew Jędrzejewski-Szmek
Instead of copying fields into new memory allocations, simply keep pointers into the receive buffer. Data in this buffer is only copied when there is not enough space for new data and a large chunk of the buffer contains old data.
2014-07-15Clear up confusion wrt. ENTRY_SIZE_MAX and DATA_SIZE_MAXZbigniew Jędrzejewski-Szmek
Define DATA_SIZE_MAX to mean the maximum size of a single field, and ENTRY_SIZE_MAX to mean the size of the whole entry, with some rough calculation of overhead over the payload. Check if entries are not too big when processing native journal messages.
2014-07-15µhttp-util: fix compilation without gnutlsZbigniew Jędrzejewski-Szmek
2014-07-15journal-upload: add config fileZbigniew Jędrzejewski-Szmek
2014-07-15journal-remote: let user specify just the main part of the urlZbigniew Jędrzejewski-Szmek
We can append /upload ourselves.
2014-07-15journal-remote: rework fd and writer reference handlingZbigniew Jędrzejewski-Szmek
2014-07-15journal-remote: improve some messagesZbigniew Jędrzejewski-Szmek
2014-07-15Fix problem with allocating large buffers and log leftoversZbigniew Jędrzejewski-Szmek
2014-07-15Constify ConfigTableItem tablesZbigniew Jędrzejewski-Szmek
2014-07-15journal-remote: allow splitting incoming logs by source hostZbigniew Jędrzejewski-Szmek
Previously existing scheme where the file name would be based on the source was just too ugly and unpredicatable. Now there are only two options: 1. just one file (until rotation), 2. one file per source host, using the hostname as filename part. For the cases where the source is specified by the user, only option one is allowed, and the full of the file must be specified.
2014-07-15Allow addresses to be specified for --listen-... argsZbigniew Jędrzejewski-Szmek
Hostnames still aren't accepted.
2014-07-15Add simple generator of fake journal export streamZbigniew Jędrzejewski-Szmek
2014-07-15shared/socket-label: fix error messageZbigniew Jędrzejewski-Szmek
Was: Failed to listen on [::]:2000: Success
2014-07-15shared/socket-util: add function to query remote addressZbigniew Jędrzejewski-Szmek
2014-07-15journal-remote: add units and read certs from default locationsZbigniew Jędrzejewski-Szmek
2014-07-15journal-upload: add watchdog supportZbigniew Jędrzejewski-Szmek
2014-07-15journal-upload: make state persistentZbigniew Jędrzejewski-Szmek
2014-07-15journal-upload: use journal as the sourceZbigniew Jędrzejewski-Szmek
2014-07-15journal-upload: HTTPS supportZbigniew Jędrzejewski-Szmek