Statistics
| Branch: | Tag: | Revision:

root / snf-pithos-backend / pithos / workers / monkey.py @ 1e47e49d

History | View | Annotate | Download (2.2 kB)

1 5dd1a322 Chrysostomos Nanakos
# -*- coding: utf-8 -
2 5dd1a322 Chrysostomos Nanakos
#
3 5dd1a322 Chrysostomos Nanakos
# Copyright 2013 GRNET S.A. All rights reserved.
4 5dd1a322 Chrysostomos Nanakos
#
5 5dd1a322 Chrysostomos Nanakos
# Redistribution and use in source and binary forms, with or
6 5dd1a322 Chrysostomos Nanakos
# without modification, are permitted provided that the following
7 5dd1a322 Chrysostomos Nanakos
# conditions are met:
8 5dd1a322 Chrysostomos Nanakos
#
9 5dd1a322 Chrysostomos Nanakos
#   1. Redistributions of source code must retain the above
10 5dd1a322 Chrysostomos Nanakos
#      copyright notice, this list of conditions and the following
11 5dd1a322 Chrysostomos Nanakos
#      disclaimer.
12 5dd1a322 Chrysostomos Nanakos
#
13 5dd1a322 Chrysostomos Nanakos
#   2. Redistributions in binary form must reproduce the above
14 5dd1a322 Chrysostomos Nanakos
#      copyright notice, this list of conditions and the following
15 5dd1a322 Chrysostomos Nanakos
#      disclaimer in the documentation and/or other materials
16 5dd1a322 Chrysostomos Nanakos
#      provided with the distribution.
17 5dd1a322 Chrysostomos Nanakos
#
18 5dd1a322 Chrysostomos Nanakos
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
19 5dd1a322 Chrysostomos Nanakos
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20 5dd1a322 Chrysostomos Nanakos
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21 5dd1a322 Chrysostomos Nanakos
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
22 5dd1a322 Chrysostomos Nanakos
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 5dd1a322 Chrysostomos Nanakos
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 5dd1a322 Chrysostomos Nanakos
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
25 5dd1a322 Chrysostomos Nanakos
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
26 5dd1a322 Chrysostomos Nanakos
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 5dd1a322 Chrysostomos Nanakos
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
28 5dd1a322 Chrysostomos Nanakos
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 5dd1a322 Chrysostomos Nanakos
# POSSIBILITY OF SUCH DAMAGE.
30 5dd1a322 Chrysostomos Nanakos
#
31 5dd1a322 Chrysostomos Nanakos
# The views and conclusions contained in the software and
32 5dd1a322 Chrysostomos Nanakos
# documentation are those of the authors and should not be
33 5dd1a322 Chrysostomos Nanakos
# interpreted as representing official policies, either expressed
34 5dd1a322 Chrysostomos Nanakos
# or implied, of GRNET S.A.
35 5dd1a322 Chrysostomos Nanakos
36 5dd1a322 Chrysostomos Nanakos
37 5dd1a322 Chrysostomos Nanakos
from archipelago import common
38 5dd1a322 Chrysostomos Nanakos
from archipelago.common import posixfd_signal_desc
39 5dd1a322 Chrysostomos Nanakos
from ctypes import cast, POINTER
40 5dd1a322 Chrysostomos Nanakos
import os
41 5dd1a322 Chrysostomos Nanakos
from gevent import select
42 5dd1a322 Chrysostomos Nanakos
import objpool
43 5dd1a322 Chrysostomos Nanakos
44 5dd1a322 Chrysostomos Nanakos
45 5dd1a322 Chrysostomos Nanakos
def pithos_xseg_wait_signal_green(ctx, sd, timeout):
46 5dd1a322 Chrysostomos Nanakos
    posixfd_sd = cast(sd, POINTER(posixfd_signal_desc))
47 5dd1a322 Chrysostomos Nanakos
    fd = posixfd_sd.contents.fd
48 5dd1a322 Chrysostomos Nanakos
    select.select([fd], [], [], timeout/1000000.0)
49 5dd1a322 Chrysostomos Nanakos
    while True:
50 5dd1a322 Chrysostomos Nanakos
        try:
51 5dd1a322 Chrysostomos Nanakos
            os.read(fd, 512)
52 5dd1a322 Chrysostomos Nanakos
        except OSError as (e, msg):
53 5dd1a322 Chrysostomos Nanakos
            if e == 11:
54 5dd1a322 Chrysostomos Nanakos
                break
55 5dd1a322 Chrysostomos Nanakos
            else:
56 5dd1a322 Chrysostomos Nanakos
                raise OSError(e, msg)
57 5dd1a322 Chrysostomos Nanakos
58 5dd1a322 Chrysostomos Nanakos
59 5dd1a322 Chrysostomos Nanakos
def patch_Request():
60 5dd1a322 Chrysostomos Nanakos
    common.xseg_wait_signal_green = pithos_xseg_wait_signal_green