i dont like this idea at all. calling ld-preload on every started app just seems wrong
On 20/06/2015 01:03, Rafał Miłecki wrote: > Using pipe automatically switches service to block buffering which kind > of breaks our logging. We won't get anything from FD until the buffer > gets filled fully or the service exits. This makes log messages appear > with an unwanted delay. > This adds a tiny libsetnbf.so that disables stdout buffering and uses it > for every service started by procd. > > Signed-off-by: Rafał Miłecki <zaj...@gmail.com> > --- > CMakeLists.txt | 7 +++++++ > service/instance.c | 12 +++++++++++- > service/setnbf.c | 6 ++++++ > 3 files changed, 24 insertions(+), 1 deletion(-) > create mode 100644 service/setnbf.c > > diff --git a/CMakeLists.txt b/CMakeLists.txt > index dfa9413..c3b7c1e 100644 > --- a/CMakeLists.txt > +++ b/CMakeLists.txt > @@ -10,6 +10,13 @@ IF(APPLE) > LINK_DIRECTORIES(/opt/local/lib) > ENDIF() > > + > +ADD_LIBRARY(setnbf SHARED service/setnbf.c) > +INSTALL(TARGETS setnbf > + LIBRARY DESTINATION lib > +) > + > + > SET(SOURCES procd.c signal.c watchdog.c state.c inittab.c rcS.c ubus.c > system.c > service/service.c service/instance.c service/validate.c > service/trigger.c service/watch.c > plug/coldplug.c plug/hotplug.c utils/utils.c) > diff --git a/service/instance.c b/service/instance.c > index 35b2def..726f859 100644 > --- a/service/instance.c > +++ b/service/instance.c > @@ -224,6 +224,7 @@ instance_run(struct service_instance *in, int _stdout, > int _stderr) > struct blobmsg_list_node *var; > struct blob_attr *cur; > char **argv; > + char ld_preload[64] = {}; /* Has to be big enough for all cases */ > int argc = 1; /* NULL terminated */ > int rem, _stdin; > > @@ -238,8 +239,17 @@ instance_run(struct service_instance *in, int _stdout, > int _stderr) > > if (!in->trace && !in->has_jail && in->seccomp) { > setenv("SECCOMP_FILE", in->seccomp, 1); > - setenv("LD_PRELOAD", "/lib/libpreload-seccomp.so", 1); > + if (ld_preload[0]) > + strcat(ld_preload, ":"); > + strcat(ld_preload, "/lib/libpreload-seccomp.so"); > } > + if (_stdout >= 0) { > + if (ld_preload[0]) > + strcat(ld_preload, ":"); > + strcat(ld_preload, "/lib/libsetnbf.so"); > + } > + if (ld_preload[0]) > + setenv("LD_PRELOAD", ld_preload, 1); > > blobmsg_list_for_each(&in->limits, var) > instance_limits(blobmsg_name(var->data), > blobmsg_data(var->data)); > diff --git a/service/setnbf.c b/service/setnbf.c > new file mode 100644 > index 0000000..7b5f3bd > --- /dev/null > +++ b/service/setnbf.c > @@ -0,0 +1,6 @@ > +#include <stdio.h> > + > +static void __attribute__((constructor)) setnbf(void) > +{ > + setbuf(stdout, NULL); > +} > _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel