summaryrefslogtreecommitdiff
path: root/service/pixelated/application.py
diff options
context:
space:
mode:
authorNavaL <ayoyo@thoughtworks.com>2016-05-31 15:17:25 +0200
committerNavaL <ayoyo@thoughtworks.com>2016-06-01 13:54:01 +0200
commit6b528c26a05f1c3f969a9896328be408bcfd6064 (patch)
tree2a42c5fe2e4a8feddfe8ddffa08e1199e14d3760 /service/pixelated/application.py
parent407c3a6313fdbe329fe49491b586da2a7897c447 (diff)
added custom c extension to set mutex locking for openssl rand generation
Diffstat (limited to 'service/pixelated/application.py')
-rw-r--r--service/pixelated/application.py29
1 files changed, 29 insertions, 0 deletions
diff --git a/service/pixelated/application.py b/service/pixelated/application.py
index ce1e0258..8b128cd3 100644
--- a/service/pixelated/application.py
+++ b/service/pixelated/application.py
@@ -40,6 +40,10 @@ from pixelated.resources.root_resource import RootResource
log = logging.getLogger(__name__)
+from multiprocessing import Lock
+from threading import current_thread
+import foobar
+
class ServicesFactory(object):
@@ -136,8 +140,33 @@ def _create_service_factory(args):
else:
return ServicesFactory(UserAgentMode(is_single_user=False))
+CRYPTO_LOCK=1
+CRYPTO_UNLOCK=2
+CRYPTO_READ=4
+CRYPTO_WRITE=8
+
+
+def idfunc():
+ return current_thread().ident
+
+
+locks = [Lock(), Lock(), Lock(), Lock(), Lock(),Lock(), Lock(), Lock(), Lock(), Lock()]
+
+
+def lockfunc(mode, n, file, line):
+ if mode & CRYPTO_LOCK == CRYPTO_LOCK:
+ print "acquire lock %d" % n
+ locks[n].acquire()
+ elif mode & CRYPTO_UNLOCK == CRYPTO_UNLOCK:
+ print "release lock %d" % n
+ locks[n].release()
+ else:
+ print "unexpected call with mode %d and n %d" % (mode, n)
+
def initialize():
+ foobar.enable_mutexes(idfunc, lockfunc)
+
log.info('Starting the Pixelated user agent')
args = arguments.parse_user_agent_args()
logger.init(debug=args.debug)