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