diff options
author | Paul Vinciguerra <pvinci@vinciconsulting.com> | 2019-06-06 07:06:09 -0400 |
---|---|---|
committer | Ole Trøan <otroan@employees.org> | 2019-06-07 09:46:37 +0000 |
commit | 2af6e92b78944879fbb41fd4538be15b97402f88 (patch) | |
tree | ba5612659031af075a64b74a64ab32cb9d3343fb /src/vpp-api/python/vpp_papi/vpp_papi.py | |
parent | 2d7b090fe220d182dc43cccb32b71ca1b55ec9d8 (diff) |
vpp_papi: Context_id allocator for running forked.
When running forked, distinct copies of the 'get_context'
singleton are created for each process. To run under forked processes,
(as with make test TEST_JOBS=10), we need to use a shared
memory value across the processes.
Type: fix
Change-Id: I9eab8ce46ec23584e5bd651735ad75fd3f018e1a
Signed-off-by: Paul Vinciguerra <pvinci@vinciconsulting.com>
Diffstat (limited to 'src/vpp-api/python/vpp_papi/vpp_papi.py')
-rw-r--r-- | src/vpp-api/python/vpp_papi/vpp_papi.py | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/vpp-api/python/vpp_papi/vpp_papi.py b/src/vpp-api/python/vpp_papi/vpp_papi.py index 8f179a21a9d..1f5cce23a79 100644 --- a/src/vpp-api/python/vpp_papi/vpp_papi.py +++ b/src/vpp-api/python/vpp_papi/vpp_papi.py @@ -16,7 +16,9 @@ from __future__ import print_function from __future__ import absolute_import +import ctypes import sys +import multiprocessing as mp import os import logging import collections @@ -263,16 +265,16 @@ class VPPApiClient(object): atexit.register(vpp_atexit, weakref.ref(self)) class ContextId(object): - """Thread-safe provider of unique context IDs.""" + """Multiprocessing-safe provider of unique context IDs.""" def __init__(self): - self.context = 0 - self.lock = threading.Lock() + self.context = mp.Value(ctypes.c_uint, 0) + self.lock = mp.Lock() def __call__(self): """Get a new unique (or, at least, not recently used) context.""" with self.lock: - self.context += 1 - return self.context + self.context.value += 1 + return self.context.value get_context = ContextId() def get_type(self, name): |