Thanks Ben for the explanation,
On Mon, Jul 22, 2013 at 10:37 AM, Ben Pfaff <b...@nicira.com> wrote: > Yes. > > On Mon, Jul 22, 2013 at 10:25:09AM -0700, Alex Wang wrote: > > Seems I understand now, > > > > Is that for directing all error messages to corresponding lines in > > "lib/dirs.c.in"? > > > > > > On Mon, Jul 22, 2013 at 10:20 AM, Alex Wang <al...@nicira.com> wrote: > > > > > Looks good to me, > > > > > > One question, why do we have the "#line directive" in "lib/dirs.c.in"? > > > We have already created "dirs.c" in "lib/automake.mk". What is the > > > use of "#line directive" here? > > > > > > > > > Thanks, > > > > > > > > > On Thu, Jul 18, 2013 at 4:15 PM, Ben Pfaff <b...@nicira.com> wrote: > > > > > >> Signed-off-by: Ben Pfaff <b...@nicira.com> > > >> --- > > >> lib/dirs.c.in | 37 +++++++++++++++++++++++++++++-------- > > >> 1 files changed, 29 insertions(+), 8 deletions(-) > > >> > > >> diff --git a/lib/dirs.c.in b/lib/dirs.c.in > > >> index 658a74b..85c49ee 100644 > > >> --- a/lib/dirs.c.in > > >> +++ b/lib/dirs.c.in > > >> @@ -1,6 +1,6 @@ > > >> #line 2 "@srcdir@/lib/dirs.c.in" > > >> /* > > >> - * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira, Inc. > > >> + * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013 Nicira, Inc. > > >> * > > >> * Licensed under the Apache License, Version 2.0 (the "License"); > > >> * you may not use this file except in compliance with the License. > > >> @@ -18,22 +18,25 @@ > > >> #include <config.h> > > >> #include "dirs.h" > > >> #include <stdlib.h> > > >> +#include "ovs-thread.h" > > >> #include "util.h" > > >> > > >> struct directory { > > >> const char *value; /* Actual value; NULL if not yet > > >> determined. */ > > >> const char *default_value; /* Default value. */ > > >> const char *var_name; /* Environment variable to override > > >> default. */ > > >> + struct ovsthread_once once; /* Ensures 'value' gets initialized > > >> once. */ > > >> }; > > >> > > >> static const char * > > >> get_dir(struct directory *d) > > >> { > > >> - if (!d->value) { > > >> + if (ovsthread_once_start(&d->once)) { > > >> d->value = getenv(d->var_name); > > >> if (!d->value || !d->value[0]) { > > >> d->value = d->default_value; > > >> } > > >> + ovsthread_once_done(&d->once); > > >> } > > >> return d->value; > > >> } > > >> @@ -41,36 +44,50 @@ get_dir(struct directory *d) > > >> const char * > > >> ovs_sysconfdir(void) > > >> { > > >> - static struct directory d = { NULL, @sysconfdir@, > "OVS_SYSCONFDIR" > > >> }; > > >> + static struct directory d = { > > >> + NULL, @sysconfdir@, "OVS_SYSCONFDIR", > OVSTHREAD_ONCE_INITIALIZER > > >> + }; > > >> + > > >> return get_dir(&d); > > >> } > > >> > > >> const char * > > >> ovs_pkgdatadir(void) > > >> { > > >> - static struct directory d = { NULL, @pkgdatadir@, > "OVS_PKGDATADIR" > > >> }; > > >> + static struct directory d = { > > >> + NULL, @pkgdatadir@, "OVS_PKGDATADIR", > OVSTHREAD_ONCE_INITIALIZER > > >> + }; > > >> + > > >> return get_dir(&d); > > >> } > > >> > > >> const char * > > >> ovs_rundir(void) > > >> { > > >> - static struct directory d = { NULL, @RUNDIR@, "OVS_RUNDIR" }; > > >> + static struct directory d = { > > >> + NULL, @RUNDIR@, "OVS_RUNDIR", OVSTHREAD_ONCE_INITIALIZER > > >> + }; > > >> + > > >> return get_dir(&d); > > >> } > > >> > > >> const char * > > >> ovs_logdir(void) > > >> { > > >> - static struct directory d = { NULL, @LOGDIR@, "OVS_LOGDIR" }; > > >> + static struct directory d = { > > >> + NULL, @LOGDIR@, "OVS_LOGDIR", OVSTHREAD_ONCE_INITIALIZER > > >> + }; > > >> + > > >> return get_dir(&d); > > >> } > > >> > > >> const char * > > >> ovs_dbdir(void) > > >> { > > >> + static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER; > > >> static const char *dbdir; > > >> - if (!dbdir) { > > >> + > > >> + if (ovsthread_once_start(&once)) { > > >> dbdir = getenv("OVS_DBDIR"); > > >> if (!dbdir || !dbdir[0]) { > > >> char *sysconfdir = getenv("OVS_SYSCONFDIR"); > > >> @@ -79,6 +96,7 @@ ovs_dbdir(void) > > >> ? xasprintf("%s/openvswitch", sysconfdir) > > >> : @DBDIR@); > > >> } > > >> + ovsthread_once_done(&once); > > >> } > > >> return dbdir; > > >> } > > >> @@ -86,6 +104,9 @@ ovs_dbdir(void) > > >> const char * > > >> ovs_bindir(void) > > >> { > > >> - static struct directory d = { NULL, @bindir@, "OVS_BINDIR" }; > > >> + static struct directory d = { > > >> + NULL, @bindir@, "OVS_BINDIR", OVSTHREAD_ONCE_INITIALIZER > > >> + }; > > >> + > > >> return get_dir(&d); > > >> } > > >> -- > > >> 1.7.2.5 > > >> > > >> _______________________________________________ > > >> dev mailing list > > >> dev@openvswitch.org > > >> http://openvswitch.org/mailman/listinfo/dev > > >> > > > > > > >
_______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev