File: sync.c

package info (click to toggle)
openhpi 3.8.0-2.3
  • links: PTS
  • area: main
  • in suites: sid, trixie
  • size: 31,888 kB
  • sloc: ansic: 225,326; cpp: 63,687; java: 16,472; cs: 15,161; python: 11,884; sh: 11,508; makefile: 4,945; perl: 1,529; xml: 36; asm: 13
file content (49 lines) | stat: -rw-r--r-- 1,285 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/*      -*- linux-c -*-
 *
 * Copyright (c) 2003 by Intel Corp.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  This
 * file and program are licensed under a BSD style license.  See
 * the Copying file included with the OpenHPI distribution for
 * full licensing terms.
 *
 * Authors:
 *     Louis Zhuang <louis.zhuang@linux.intel.com>
 */

#include "ipmi.h"

SaErrorT ohoi_loop_until(loop_indicator_cb indicator, const void *cb_data, int to, struct ohoi_handler *ipmi_handler) 
{
        struct timeval tv1, tv2, tv3; 
		
        /* Wait 5 seconds for result */
        gettimeofday(&tv1, NULL);
	tv1.tv_sec += to;
	while (1) {
		if (indicator(cb_data)) {
			return SA_OK;
		}
		memset(&tv3, 0, sizeof(tv3));	
		gettimeofday(&tv2, NULL);
				
		if (tv2.tv_sec>tv1.tv_sec) {
			break;
		}
		sel_select(ipmi_handler->ohoi_sel, NULL, 0, NULL, &tv3);
	}
		
	return SA_ERR_HPI_NO_RESPONSE;
}

static int simple_indicator(const void *cb_data)
{
        return (*(const int *)cb_data);
}

SaErrorT ohoi_loop(int *done, struct ohoi_handler *ipmi_handler)
{
        return (ohoi_loop_until(simple_indicator, done, IPMI_DATA_WAIT, ipmi_handler));
}