コード例 #1
0
    def __init__(self, name):
        # Initialize variables for memory regions and buffers and Semaphore
        self.shm_buf = None
        self.shm_region = None
        self.md_buf = None
        self.md_region = None
        self.image_lock = None

        self.shm_name = name
        self.md_name = name + "-meta"
        self.image_lock_name = name

        # Initialize or retreive metadata memory region
        try:
            self.md_region = SharedMemory(self.md_name)
            self.md_buf = mmap.mmap(self.md_region.fd, sizeof(MD))
            self.md_region.close_fd()
        except ExistentialError:
            self.md_region = SharedMemory(self.md_name,
                                          O_CREAT,
                                          size=sizeof(MD))
            self.md_buf = mmap.mmap(self.md_region.fd, self.md_region.size)
            self.md_region.close_fd()

        # Initialize or retreive Semaphore
        try:
            self.image_lock = Semaphore(self.image_lock_name, O_CREX)
        except ExistentialError:
            image_lock = Semaphore(self.image_lock_name, O_CREAT)
            image_lock.unlink()
            self.image_lock = Semaphore(self.image_lock_name, O_CREX)

        self.image_lock.release()
コード例 #2
0
    def __init__(self, name):
        # Initialize varaibles for memory regions and buffers and Semaphore
        self.shm_buf = None
        self.shm_region = None
        self.value_lock = None

        self.shm_name = name
        self.value_lock_name = name

        # Initialize shared memory buffer
        try:
            self.shm_region = SharedMemory(self.shm_name)
            self.shm_buf = mmap.mmap(self.shm_region.fd, sizeof(c_float))
            self.shm_region.close_fd()
        except ExistentialError:
            self.shm_region = SharedMemory(self.shm_name,
                                           O_CREAT,
                                           size=sizeof(c_float))
            self.shm_buf = mmap.mmap(self.shm_region.fd, self.shm_region.size)
            self.shm_region.close_fd()

        # Initialize or retreive Semaphore
        try:
            self.value_lock = Semaphore(self.value_lock_name, O_CREX)
        except ExistentialError:
            value_lock = Semaphore(self.value_lock_name, O_CREAT)
            value_lock.unlink()
            self.value_lock = Semaphore(self.value_lock_name, O_CREX)

        self.value_lock.release()
コード例 #3
0
    def __init__(self, name):
        self.shm_region = None
        logging.info("Writer launched")
        self.md_region = SharedMemory(name + '-meta', O_CREAT, size=sizeof(MD))
        self.md_buf = mmap.mmap(self.md_region.fd, self.md_region.size)
        self.md_region.close_fd()

        self.shm_buf = None
        self.shm_name = name
        self.count = 0

        try:
            self.sem = Semaphore(name, O_CREX)
        except ExistentialError:
            sem = Semaphore(name, O_CREAT)
            sem.unlink()
            self.sem = Semaphore(name, O_CREX)
        self.sem.release()
コード例 #4
0
    def lock(self, on_create: Callable = default_on_create):
        hash = hashlib.sha1(self.path.encode()).hexdigest()
        with Semaphore(f"/{hash}-lock", flags=O_CREAT, initial_value=1):
            retval = os.path.exists(self._file)
            if not retval:
                with open(self._file, "w") as f:
                    f.write("1")
                on_create(self.path)

        return retval
コード例 #5
0
ファイル: shmem.py プロジェクト: oaken-source/pyspaces
 def _connect(self):
     '''
     attempt to connect to the shared memory
     '''
     LOG.info('shmem %s: attempting connect', self._name)
     shmem = SharedMemory(self._name)
     self._mmap = mmap.mmap(shmem.fd, shmem.size)
     shmem.close_fd()
     self._lock = Semaphore('/pyspace_%s_lock' % self._name)
     LOG.info('shmem %s: connect succeeded', self._name)
コード例 #6
0
def setup_email():
    # TODO: Fix this data race! This try/catch is ugly; why is it even
    # racing here? Perhaps we need to multiproc + multithread lock
    # inside of setup_database to block the check?
    with Semaphore("/test-emails", flags=O_CREAT, initial_value=1):
        if not os.path.exists(Email.TEST_DIR):
            # Create the directory.
            os.makedirs(Email.TEST_DIR)

        # Cleanup all email files for this test suite.
        prefix = Email.email_prefix(suite=True)
        files = os.listdir(Email.TEST_DIR)
        for file in files:
            if file.startswith(prefix):
                os.remove(os.path.join(Email.TEST_DIR, file))
コード例 #7
0
    def __init__(self, name):
        self.shm_buf = None
        self.md_buf = None

        while not self.md_buf:
            try:
                print("Waiting for Block Input...")
                md_region = SharedMemory(name + '-meta')
                self.md_buf = mmap.mmap(md_region.fd, sizeof(MD))
                md_region.close_fd()
                sleep(1)
            except ExistentialError:
                sleep(1)

        self.shm_name = name
        self.sem = Semaphore(name, 0)
コード例 #8
0
ファイル: read.py プロジェクト: thtrvdnl/driver
    def __init__(self, name):
        self.shm_buf = None
        self.md_buf = None

        while not self.md_buf:
            try:
                # print("Waiting for MetaData shared memory is available.")
                md_region = SharedMemory(name + "-meta")
                self.md_buf = mmap.mmap(md_region.fd, sizeof(MD))
                md_region.close_fd()
                # sleep(1)
            except ExistentialError:
                pass
                # sleep(1)

        self.shm_name = name
        self.sem = Semaphore(name, 0)
コード例 #9
0
    def __init__(self, name):
        self.shm_buf = None
        self.md_buf = None
        logging.info("Reader launched")
        while not self.md_buf:
            try:
                logging.warning(
                    "Waiting for MetaData shared memory is available.")
                md_region = SharedMemory(name + '-meta')
                self.md_buf = mmap.mmap(md_region.fd, sizeof(MD))
                md_region.close_fd()
                sleep(1)
            except ExistentialError:
                sleep(1)

        self.shm_name = name
        self.sem = Semaphore(name, 0)
コード例 #10
0
def pi(n):
    pids = []
    unit = n / 10
    sem_lock = Semaphore('/pi_sem_lock', flags=posix_ipc.O_CREX, initial_value=1)
    memory = Memory('/pi_rw', size=8, flags=posix_ipc.O_CREX)
    os.lseek(memory.fd, 0, os.SEEK_SET)
    os.write(memory.fd, struct.pack('d', 0.0))
    for i in range(10):
        mink = unit * i
        maxk = mink + unit
        pid = os.fork()
        if pid > 0:
            pids.append(pid)
        else:
            s = calc_slice(mink, maxk)
            sem_lock.acquire()
            try:
                os.lseek(memory.fd, 0, os.SEEK_SET)
                bs = os.read(memory.fd, 8)
                cur_val, = struct.unpack('d', bs)
                cur_val += s
                bs = struct.pack('d', cur_val)  # 序列化
                os.lseek(memory.fd, 0, os.SEEK_SET)
                os.write(memory.fd, bs)
                memory.close_fd()
            finally:
                sem_lock.release()

            sys.exit(0)
    sums = []
    for pid in pids:
        os.waitpid(pid, 0)

    os.lseek(memory.fd, 0, os.SEEK_SET)
    bs = os.read(memory.fd, 8)
    sums, = struct.unpack('d', bs)
    memory.close_fd()
    memory.unlink()
    sem_lock.unlink()

    return math.sqrt(sums * 8)
コード例 #11
0
ファイル: shmem.py プロジェクト: oaken-source/pyspaces
            def _create(self):
                '''
                attempt to create and initialize the shared memory
                '''
                LOG.info('shmem %s: attempting create shmem', self._name)
                shmem = SharedMemory(self._name, size=SHMEM_SIZE, flags=O_CREX)
                LOG.info('shmem %s: attempting create mmap', self._name)
                self._mmap = mmap.mmap(shmem.fd, shmem.size)
                shmem.close_fd()
                LOG.info('shmem %s: attempting create semaphore', self._name)
                self._lock = Semaphore('/pyspace_%s_lock' % self._name, flags=O_CREX)
                LOG.info('shmem %s: create succeeded', self._name)

                try:
                    self._initialize()
                    self._lock.release()
                except:
                    LOG.exception('shmem %s: initialize failed; attempting unlink', self._name)
                    shmem.unlink()
                    self._lock.unlink()
                    raise
コード例 #12
0
# -*- coding: utf-8 -*-

from z3 import *
from ast import *
from utils import *
from posix_ipc import Semaphore, O_CREAT
import os
import sys
import atexit

N_CPUS = 4

## Use semaphore to limit the number of concurrent processes,
## we allow N_CPUS processes running simultaneously.
sem = Semaphore("/fork_sem", O_CREAT, 0o644, N_CPUS)
sem.unlink()
sem.acquire()


def on_exit():
    sem.release()
    ## reap all zombies.
    try:
        while True:
            os.waitpid(0)
    except:
        pass
    log("exit")


atexit.register(on_exit)
コード例 #13
0
ファイル: chorus.py プロジェクト: Iziren/wade
 def __init__(self, name=None):
     self._value = None
     self._semaphore = Semaphore(name, flags=O_CREX)
コード例 #14
0
    def __init__(self, target_path, args=[]):
        global _lock
        global _process
        global _target_path
        global _shm
        global _mm
        global _ping_sem
        global _pong_sem
        global _clients
        global _next_client_id

        if _shm is None:
            launch_afl_forkserver = True
        else:
            launch_afl_forkserver = False

        with _lock:
            self.client_id = _next_client_id
            _next_client_id += 1

            if launch_afl_forkserver:
                if _process is None:
                    env = os.environ.copy()

                    if 'EXTERNAL_AFL_FORKSERVER' not in env:
                        print("Starting afl-forkserver...")

                        fd, afl_out_file = tempfile.mkstemp(
                            suffix='afl_out_file')
                        os.close(fd)

                        FNULL = open(os.devnull, 'w')

                        cmd = [
                            gym_fuzz1ng.afl_forkserver_path(),
                            '-f',
                            afl_out_file,
                            '--',
                            target_path,
                        ]
                        cmd += args
                        cmd += ['@@']

                        _process = subprocess.Popen(
                            cmd,
                            env=env,
                            stdout=FNULL,
                            stderr=subprocess.STDOUT,
                        )

                    _target_path = target_path

                    time.sleep(1)

                    _shm = SharedMemory(SHARED_MEM_NAME)
                    _mm = mmap.mmap(_shm.fd, 0)

                    _ping_sem = Semaphore(SEM_PING_SIGNAL_NAME)
                    _pong_sem = Semaphore(SEM_PONG_SIGNAL_NAME)
                else:
                    if target_path != _target_path:
                        raise Exception(
                            "Concurrent targets is not supported: {} {}".
                            format(
                                target_path,
                                _target_path,
                            ), )

            else:
                print("Skipping afl-forkserver start.")

            _clients[self.client_id] = True