Supports igen code for pvm.
[dyninst.git] / common / src / rpcUtilPVM.C
1
2 //
3 // This file defines a set of utility routines for RPC services.
4 //
5 //
6 #include <stdlib.h>
7 #include <errno.h>
8 #include <assert.h>
9 #include <util/h/rpcUtilPVM.h>
10
11 //
12 // Starts the 'program' on 'machine' and saves its thread id
13 //
14 PVMrpc::PVMrpc(char *where, char *program, char **argv, int flag)
15 {
16   pvm_error = 0;
17   other_tid = -1;
18   if ((my_tid = pvm_mytid()) < 0)
19     pvm_error = -1;
20   else 
21     {
22       if (pvm_spawn(program, argv, flag, where, 1, &other_tid) != 1)
23         pvm_error = -1;
24     }
25 }
26
27 //
28 // Accepts id of other thread
29 //
30 PVMrpc::PVMrpc(int other)
31 {
32   if ((my_tid = pvm_mytid()) < 0)
33     pvm_error = -1;
34   else 
35     pvm_error = 0;
36
37   other_tid = other;
38 }
39
40 //
41 // parent is other
42 //
43 PVMrpc::PVMrpc()
44 {
45   pvm_error = 0;
46   if ((my_tid = pvm_mytid()) < 0)
47     pvm_error = -1;
48   else
49     { if ((other_tid = pvm_parent()) < 0) pvm_error = -1;}
50 }
51
52 int
53 PVMrpc::readReady()
54 {
55   int bufid, count;
56   struct taskinfo *tp;
57
58   if (pvm_error == -1) return -1;
59   if ((bufid = pvm_probe(other_tid, -1)) < 0)
60     return -1;
61   else if (bufid >= 1)
62     return 1;
63   else if (other_tid == -1)
64     return 0;
65   else if ((pvm_tasks(other_tid, &count, &tp) < 0) ||
66            (count != 1) ||
67            (tp->ti_tid != other_tid))
68     return (pvm_probe (other_tid, -1));
69   else
70     return 0;
71 }
72
73