[ovs-dev] [threads 00/11] basic thread support library

Ben Pfaff blp at nicira.com
Wed Jun 19 20:17:01 UTC 2013


This series has two purposes:

    * Add a basic thread support library to the tree.

    * Get rid of all calls to C library functions that POSIX describes
      as inherently unsafe in a multithreaded program, and then add a
      make-time check that flags an error if any calls get reintroduced.

Ben Pfaff (11):
  ovs-thread: New module, initially just with pthreads wrapper
    functions.
  ovs-thread: Add per-thread data support.
  ovs-atomic: New library for atomic operations.
  ovs-thread: Add support for convenient once-only initializers.
  ovs-thread: Add support for various thread-related assertions.
  New function ovs_strerror() as a thread-safe replacement for
    strerror().
  Replace all uses of strerror() by ovs_strerror(), for thread safety.
  random: Make thread-safe.
  Use random_*() instead of rand(), for thread safety.
  sparse: Remove prototypes for thread-unsafe functions from headers.
  Makefile: Blacklist functions that threaded programs cannot use
    safely.

 Makefile.am                       |   26 ++-
 build-aux/thread-safety-blacklist |   90 +++++++++
 configure.ac                      |    8 +-
 include/sparse/automake.mk        |    1 +
 include/sparse/math.h             |    5 +-
 include/sparse/netinet/in.h       |    3 +-
 include/sparse/pthread.h          |   61 ++++++
 lib/automake.mk                   |    9 +
 lib/command-line.c                |    4 +-
 lib/compiler.h                    |   36 ++++-
 lib/daemon.c                      |   43 ++---
 lib/dpif-linux.c                  |    9 +-
 lib/dpif-netdev.c                 |    4 +-
 lib/dpif.c                        |   23 ++-
 lib/entropy.c                     |    4 +-
 lib/fatal-signal.c                |    6 +-
 lib/json.c                        |    5 +-
 lib/jsonrpc.c                     |    7 +-
 lib/learning-switch.c             |    6 +-
 lib/lockfile.c                    |   11 +-
 lib/netdev-bsd.c                  |   32 ++--
 lib/netdev-dummy.c                |    5 +-
 lib/netdev-linux.c                |   63 ++++---
 lib/netdev.c                      |   10 +-
 lib/netlink-notifier.c            |    7 +-
 lib/netlink-socket.c              |   26 ++--
 lib/ofp-errors.c                  |   10 +-
 lib/ofp-version-opt.c             |    3 +
 lib/ovs-atomic-c11.h              |   62 ++++++
 lib/ovs-atomic-gcc4+.c            |   68 +++++++
 lib/ovs-atomic-gcc4+.h            |  267 ++++++++++++++++++++++++++
 lib/ovs-atomic-gcc4.7+.h          |  141 ++++++++++++++
 lib/ovs-atomic-pthreads.c         |   61 ++++++
 lib/ovs-atomic-pthreads.h         |  157 ++++++++++++++++
 lib/ovs-atomic.h                  |  250 +++++++++++++++++++++++++
 lib/ovs-thread.c                  |  194 +++++++++++++++++++
 lib/ovs-thread.h                  |  370 +++++++++++++++++++++++++++++++++++++
 lib/poll-loop.c                   |    4 +-
 lib/process.c                     |   10 +-
 lib/random.c                      |   26 ++-
 lib/rconn.c                       |    8 +-
 lib/reconnect.c                   |    6 +-
 lib/rtbsd.c                       |    8 +-
 lib/sflow_agent.c                 |    3 +-
 lib/signals.c                     |    4 +-
 lib/socket-util.c                 |   40 ++--
 lib/stream-fd.c                   |    4 +-
 lib/stream-ssl.c                  |   19 +-
 lib/stream-tcp.c                  |    4 +-
 lib/stream-unix.c                 |    7 +-
 lib/timeval.c                     |    8 +-
 lib/unixctl.c                     |    2 +-
 lib/util.c                        |   57 +++++--
 lib/util.h                        |    3 +-
 lib/vconn-stream.c                |    6 +-
 lib/vconn.c                       |    2 +-
 lib/vlandev.c                     |    6 +-
 lib/vlog.c                        |    4 +-
 lib/worker.c                      |    8 +-
 m4/openvswitch.m4                 |   42 ++++-
 ofproto/collectors.c              |    6 +-
 ofproto/connmgr.c                 |    6 +-
 ofproto/in-band.c                 |   12 +-
 ofproto/ofproto-dpif-sflow.c      |    2 +-
 ofproto/ofproto-dpif.c            |   14 +-
 ofproto/ofproto.c                 |   24 ++--
 ovsdb/jsonrpc-server.c            |    6 +-
 ovsdb/ovsdb-server.c              |    7 +-
 tests/automake.mk                 |    5 +
 tests/library.at                  |    4 +
 tests/test-atomic.c               |   94 ++++++++++
 tests/test-classifier.c           |   25 ++--
 tests/test-hindex.c               |    3 +-
 tests/test-hmap.c                 |    5 +-
 tests/test-netflow.c              |    2 +-
 tests/test-sflow.c                |    2 +-
 tests/test-util.c                 |    4 +-
 tests/test-vconn.c                |   12 +-
 utilities/ovs-controller.c        |    2 +-
 utilities/ovs-dpctl.c             |    8 +-
 utilities/ovs-ofctl.c             |   10 +-
 vswitchd/bridge.c                 |   18 +-
 vswitchd/ovs-vswitchd.c           |    4 +-
 vswitchd/system-stats.c           |   20 ++-
 vswitchd/xenserver.c              |    4 +-
 85 files changed, 2335 insertions(+), 332 deletions(-)
 create mode 100644 build-aux/thread-safety-blacklist
 create mode 100644 include/sparse/pthread.h
 create mode 100644 lib/ovs-atomic-c11.h
 create mode 100644 lib/ovs-atomic-gcc4+.c
 create mode 100644 lib/ovs-atomic-gcc4+.h
 create mode 100644 lib/ovs-atomic-gcc4.7+.h
 create mode 100644 lib/ovs-atomic-pthreads.c
 create mode 100644 lib/ovs-atomic-pthreads.h
 create mode 100644 lib/ovs-atomic.h
 create mode 100644 lib/ovs-thread.c
 create mode 100644 lib/ovs-thread.h
 create mode 100644 tests/test-atomic.c

-- 
1.7.2.5




More information about the dev mailing list