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