Skip to content

Commit

Permalink
Makefile: Blacklist functions that threaded programs cannot use safely.
Browse files Browse the repository at this point in the history
Some functions that POSIX says cannot be used safely in multithreaded
programs are not on the initial blacklist:

    - getenv() should be safe in real implementations in the absence of
      changes to the environment.  (putenv() and setenv() are blacklisted.)

    - We only use getopt() before spawning extra threads, and I expect this
      to continue to be true.

Signed-off-by: Ben Pfaff <[email protected]>
  • Loading branch information
blp committed Jun 28, 2013
1 parent b028db4 commit 6a3e30f
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 0 deletions.
14 changes: 14 additions & 0 deletions Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,20 @@ check-assert-h-usage:
fi
.PHONY: check-assert-h-usage

ALL_LOCAL += thread-safety-check
thread-safety-check:
@if test -e '$(srcdir)'/.git && (git --version) >/dev/null 2>&1 && \
grep -n -f '$(srcdir)'/build-aux/thread-safety-blacklist \
`git ls-files '$(srcdir)' | grep '\.[ch]$$' \
| $(EGREP) -v '^datapath|^lib/sflow|^third-party'` \
| $(EGREP) -v ':[ ]*/?\*'; \
then \
echo "See above for list of calls to functions that are"; \
echo "blacklisted due to thread safety issues"; \
exit 1; \
fi
EXTRA_DIST += build-aux/thread-safety-blacklist

if HAVE_GROFF
ALL_LOCAL += manpage-check
manpage-check: $(man_MANS) $(dist_man_MANS) $(noinst_man_MANS)
Expand Down
90 changes: 90 additions & 0 deletions build-aux/thread-safety-blacklist
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
\basctime(
\bbasename(
\bcatgets(
\bcrypt(
\bctermid(
\bctime(
\bdbm_clearerr(
\bdbm_close(
\bdbm_delete(
\bdbm_error(
\bdbm_fetch(
\bdbm_firstkey(
\bdbm_nextkey(
\bdbm_open(
\bdbm_store(
\bdirname(
\bdlerror(
\bdrand48(
\becvt(
\bencrypt(
\bendgrent(
\bendpwent(
\bendutxent(
\bfcvt(
\bftw(
\bgcvt(
\bgetc_unlocked(
\bgetchar_unlocked(
\bgetdate(
\bgetgrent(
\bgetgrgid(
\bgetgrnam(
\bgethostbyaddr(
\bgethostbyname(
\bgethostent(
\bgetlogin(
\bgetmntent(
\bgetnetbyaddr(
\bgetnetbyname(
\bgetnetent(
\bgetprotobyname(
\bgetprotobynumber(
\bgetprotoent(
\bgetpwent(
\bgetpwnam(
\bgetpwuid(
\bgetservbyname(
\bgetservbyport(
\bgetservent(
\bgetutxent(
\bgetutxid(
\bgetutxline(
\bgmtime(
\bhcreate(
\bhdestroy(
\bhsearch(
\binet_ntoa(
\bl64a(
\blgamma(
\blgammaf(
\blgammal(
\blocaleconv(
\blocaltime(
\blrand48(
\bmrand48(
\bnftw(
\bnl_langinfo(
\bptsname(
\bputc_unlocked(
\bputchar_unlocked(
\bputenv(
\bpututxline(
\brand(
\bsetenv(
\bsetgrent(
\bsetkey(
\bsetpwent(
\bsetutxent(
\bsigprocmask(
\bstrerror(
\bstrsignal(
\bstrtok(
\bsystem(
\btmpnam(
\bttyname(
\bunsetenv(
\bwcrtomb(
\bwcsrtombs(
\bwcstombs(
\bwctomb(

0 comments on commit 6a3e30f

Please sign in to comment.