diff options
author | Samuel Mendoza-Jonas <sam@mendozajonas.com> | 2016-05-16 16:06:30 +1000 |
---|---|---|
committer | Samuel Mendoza-Jonas <sam@mendozajonas.com> | 2016-06-28 16:17:21 +1000 |
commit | 2163af58b5e631a2a8d2acd79b541ed884ab7b57 (patch) | |
tree | 28d351c16e608f5a0bd072fcfe2dac5f1809ce97 /lib | |
parent | 07a5f9f1c50a9185851cd486d732976573d15c4f (diff) | |
download | petitboot-2163af58b5e631a2a8d2acd79b541ed884ab7b57.zip petitboot-2163af58b5e631a2a8d2acd79b541ed884ab7b57.tar.gz |
discover/pxe-parser: Retrieve configs asynchronously
Depending on the configuration of the DHCP server and the network, tftp
requests made by the pxe parser can timeout. The pxe parser makes these
requests synchronously so several timeouts can block the server
completely for several minutes, leaving the server unresponsive to UI
requests.
Rework the pxe parser such that it handles the result of each tftp
request in a callback, which can complete after iterate_parsers() has
returned. Each callback is allocated its own conf_context which takes a
talloc reference on the discover_context so that each callback can
commit new boot options after the initial iterate loop has completed.
This also means talloc_unlink must be used instead by the original
parent of the discover_context.
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/talloc/talloc.c | 2 | ||||
-rw-r--r-- | lib/talloc/talloc.h | 1 | ||||
-rw-r--r-- | lib/url/url.c | 2 | ||||
-rw-r--r-- | lib/url/url.h | 1 |
4 files changed, 4 insertions, 2 deletions
diff --git a/lib/talloc/talloc.c b/lib/talloc/talloc.c index f233541..d3e2065 100644 --- a/lib/talloc/talloc.c +++ b/lib/talloc/talloc.c @@ -760,7 +760,7 @@ off_t talloc_total_blocks(const void *ptr) /* return the number of external references to a pointer */ -static int talloc_reference_count(const void *ptr) +int talloc_reference_count(const void *ptr) { struct talloc_chunk *tc = talloc_chunk_from_ptr(ptr); struct talloc_reference_handle *h; diff --git a/lib/talloc/talloc.h b/lib/talloc/talloc.h index b5fca44..b9afc22 100644 --- a/lib/talloc/talloc.h +++ b/lib/talloc/talloc.h @@ -133,6 +133,7 @@ void *_talloc_realloc_array(const void *ctx, void *ptr, size_t el_size, unsigned void *talloc_realloc_fn(const void *context, void *ptr, size_t size); void *talloc_autofree_context(void); size_t talloc_get_size(const void *ctx); +int talloc_reference_count(const void *ptr); #endif diff --git a/lib/url/url.c b/lib/url/url.c index 7202f49..6eeced3 100644 --- a/lib/url/url.c +++ b/lib/url/url.c @@ -246,7 +246,7 @@ static void pb_url_update_full(struct pb_url *url) url->full = pb_url_to_string(url); } -static struct pb_url *pb_url_copy(void *ctx, const struct pb_url *url) +struct pb_url *pb_url_copy(void *ctx, const struct pb_url *url) { struct pb_url *new_url; diff --git a/lib/url/url.h b/lib/url/url.h index 25e1ad8..9043615 100644 --- a/lib/url/url.h +++ b/lib/url/url.h @@ -62,6 +62,7 @@ struct pb_url { bool is_url(const char *str); struct pb_url *pb_url_parse(void *ctx, const char *url_str); +struct pb_url *pb_url_copy(void *ctx, const struct pb_url *url); struct pb_url *pb_url_join(void *ctx, const struct pb_url *url, const char *s); char *pb_url_to_string(struct pb_url *url); |