~ubuntu-branches/ubuntu/trusty/ocamlnet/trusty

« back to all changes in this revision

Viewing changes to src/netmulticore/netmcore_sem.ml

  • Committer: Bazaar Package Importer
  • Author(s): Stéphane Glondu
  • Date: 2011-09-02 14:12:33 UTC
  • mfrom: (18.2.3 sid)
  • Revision ID: james.westby@ubuntu.com-20110902141233-zbj0ygxb92u6gy4z
Tags: 3.4-1
* New upstream release
  - add a new NetcgiRequire directive to ease dependency management
    (Closes: #637147)
  - remove patches that were applied upstream:
    + Added-missing-shebang-lines-in-example-shell-scripts
    + Try-also-ocamlc-for-POSIX-threads

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
(* $Id: netmcore_sem.ml 1570 2011-04-08 14:47:16Z gerd $ *)
 
2
 
 
3
open Netmcore_heap
 
4
 
 
5
type semaphore = string
 
6
    (* An empty string is a dummy sem.  Otherwise, the string is on
 
7
       the heap, and it contains the semaphore value *)
 
8
 
 
9
let dummy() = ""
 
10
 
 
11
let create mut initval =
 
12
  let s = String.create Netsys_posix.sem_size in
 
13
  let s_heap = add mut s in
 
14
  let s_addr = Netsys_mem.obj_address (Obj.repr s_heap) in
 
15
  let m = Netsys_mem.grab s_addr Netsys_posix.sem_size in
 
16
  ignore(Netsys_posix.sem_init m 0 true initval);
 
17
  s_heap
 
18
 
 
19
let get_sem s_heap =
 
20
  if s_heap = "" then
 
21
    failwith "Netmcore_sem: cannot access dummy semaphore";
 
22
  let s_addr = Netsys_mem.obj_address (Obj.repr s_heap) in
 
23
  let m = Netsys_mem.grab s_addr Netsys_posix.sem_size in
 
24
  Netsys_posix.as_sem m 0
 
25
 
 
26
let destroy s_heap =
 
27
  if s_heap <> "" then (
 
28
    let sem = get_sem s_heap in
 
29
    Netsys_posix.sem_destroy sem
 
30
  )
 
31
 
 
32
let getvalue s_heap =
 
33
  let sem = get_sem s_heap in
 
34
  Netsys_posix.sem_getvalue sem
 
35
 
 
36
let post s_heap =
 
37
  let sem = get_sem s_heap in
 
38
  Netsys_posix.sem_post sem
 
39
 
 
40
let wait s_heap swb =
 
41
  let sem = get_sem s_heap in
 
42
  Netsys.restart (Netsys_posix.sem_wait sem) swb
 
43