diff options
| -rwxr-xr-x | src/cmdipc | 36 |
1 files changed, 28 insertions, 8 deletions
@@ -66,9 +66,9 @@ parser.add_argumentless(['-S', '--semaphore'], 0, 'Use semaphore') parser.add_argumentless(['-M', '--shm'], 0, 'Use shared memory') parser.add_argumentless(['-X', '--mutex'], 0, 'Use mutex (1 semaphore)') parser.add_argumentless(['-C', '--condition'], 0, 'Use condition (3 semaphores)') -parser.add_argumentless(['-B', '--barrier'], 0, 'Use barrier (2 semaphores; -P: 3 semaphores)') +parser.add_argumentless(['-B', '--barrier'], 0, 'Use barrier (2 semaphores; -P: +1 semaphore)') parser.add_argumentless(['-L', '--shared-lock'], 0, 'Use shared lock (3 semaphores)') -parser.add_argumentless(['-R', '--rendezvous'], 0, 'Use rendezvous (2 semaphores, 1 mqueue, SysV only)') +parser.add_argumentless(['-R', '--rendezvous'], 0, 'Use rendezvous (2 semaphores, 1 mqueue; -P: +1 semaphore)') parser.parse() @@ -369,10 +369,11 @@ try: print('Invalid command given', file = sys.stderr) sys.exit(1) - elif (not use_posix) and (parser.opts['--rendezvous'] is not None): + elif parser.opts['--rendezvous'] is not None: key, flags, mode, spool, size, timeout = [None, None, None], 0, 0o600, 2, 8192, None if use_posix: spool, size = 1, 2048 + key = [None] * 4 if parser.opts['--nonblocking'] is not None: timeout = 0 if parser.opts['--key'] is not None: key = ipc.keysep(parser.opts['--key'][0]) if parser.opts['--create'] is not None: flags = ipc.CREAT @@ -384,8 +385,13 @@ try: m = ipc.Semaphore(key[0], flags, mode, 1) i = ipc.Semaphore(key[1], flags, mode, 0) q = ipc.MessageQueue(key[2], flags, mode, spool, size) + if use_posix: + p = ipc.Semaphore(key[3], flags, mode, 0) if key[0] is None: - print('key: %s' % ipc.keycat(m.key, i.key, q.key)) + if use_posix: + print('key: %s' % ipc.keycat(m.key, i.key, q.key, p.key)) + else: + print('key: %s' % ipc.keycat(m.key, i.key, q.key)) nocmd = False if len(parser.files) > 0: send_message = ' '.join(parser.files).encode('utf-8') @@ -393,13 +399,23 @@ try: if i.value == 0: i.V() m.V() - q.send(send_message, timeout, 1) - (recv_message, _type) = q.receive(timeout, 2) + if not use_posix: + q.send(send_message, timeout, 1) + (recv_message, _type) = q.receive(timeout, 2) + else: + q.send(send_message, timeout) + p.P() + (recv_message, _prio) = q.receive(timeout) else: i.P(timeout) m.V() - (recv_message, _type) = q.receive(timeout, 1) - q.send(send_message, timeout, 2) + if not use_posix: + (recv_message, _type) = q.receive(timeout, 1) + q.send(send_message, timeout, 2) + else: + (recv_message, _prio) = q.receive(timeout) + p.V() + q.send(send_message, timeout) print('length: %i' % len(recv_message)) sys.stdout.buffer.write(recv_message) sys.stdout.buffer.write(b'\n') @@ -410,10 +426,14 @@ try: m.remove() i.remove() q.remove() + if use_posix: + p.remove() elif nocmd: m.close() i.close() q.close() + if use_posix: + p.close() print('Invalid command given', file = sys.stderr) sys.exit(1) |
