[Apcupsd-commits] apcupsd/src/drivers/net net.c,1.32.2.1,1.32.2.2
Brought to you by:
adk0212
From: Adam K. <ad...@us...> - 2007-11-21 22:09:29
|
Update of /cvsroot/apcupsd/apcupsd/src/drivers/net In directory sc8-pr-cvs11.sourceforge.net:/tmp/cvs-serv15949/src/drivers/net Modified Files: Tag: Branch-3_14 net.c Log Message: Fix bugs that could cause NIS-net driver to get stuck waiting for comms to be restored instead of shutting down. This included adding a timeout for connection attempts in net_open() and removing a wait-for-comms loop from the net driver. Also fix up fallout from apclibnis cleanups in apcaccess. Thanks to Daniel Born <bor...@ya...> for reporting the issue and testing fixes. Index: net.c =================================================================== RCS file: /cvsroot/apcupsd/apcupsd/src/drivers/net/net.c,v retrieving revision 1.32.2.1 retrieving revision 1.32.2.2 diff -u -d -r1.32.2.1 -r1.32.2.2 --- net.c 6 Oct 2007 14:52:52 -0000 1.32.2.1 +++ net.c 21 Nov 2007 22:09:30 -0000 1.32.2.2 @@ -226,15 +226,12 @@ if ((nid->sockfd = net_open(nid->hostname, NULL, nid->port)) < 0) { Dmsg0(90, "Exit poll_ups 0 comm lost\n"); if (!ups->is_commlost()) { - log_event(ups, LOG_ERR, "fetch_data: tcp_open failed for %s port %d", - nid->hostname, nid->port); ups->set_commlost(); } return 0; } if (net_send(nid->sockfd, "status", 6) != 6) { - log_event(ups, LOG_ERR, "fill_buffer: write error on socket."); net_close(nid->sockfd); Dmsg0(90, "Exit poll_ups 0 no status flag\n"); ups->set_commlost(); @@ -274,8 +271,8 @@ { struct driver_data *nid = (struct driver_data *)ups->driver_internal_data; time_t now; - int tlog; - bool comm_err = false; + static time_t tlog = 0; + static bool comm_err = false; /* Poll or fill the buffer maximum one time per second */ now = time(NULL); @@ -284,40 +281,36 @@ return true; } - for (tlog = 0; !poll_ups(ups); tlog -= SLEEP_TIME) { - if (tlog <= 0) { - /* log every 10 minutes */ - tlog = 10 * 60; + if (!poll_ups(ups)) { + /* generate event once */ + if (!comm_err) { + execute_command(ups, ups_event[CMDCOMMFAILURE]); + comm_err = true; + } + /* log every 10 minutes */ + if (now - tlog >= 10 * 60) { + tlog = now; log_event(ups, event_msg[CMDCOMMFAILURE].level, event_msg[CMDCOMMFAILURE].msg); - - /* generate event once */ - if (!comm_err) - execute_command(ups, ups_event[CMDCOMMFAILURE]); } - - sleep(SLEEP_TIME); - comm_err = true; - ups->set_commlost(); - } - - if (comm_err) { - generate_event(ups, CMDCOMMOK); - nid->last_fill_time = time(NULL); } else { - nid->last_fill_time = now; - } + if (comm_err) { + generate_event(ups, CMDCOMMOK); + tlog = 0; + comm_err = false; + } - ups->clear_commlost(); + nid->last_fill_time = now; - if (!nid->got_caps) - net_ups_get_capabilities(ups); + if (!nid->got_caps) + net_ups_get_capabilities(ups); - if (nid->got_caps && !nid->got_static_data) - net_ups_read_static_data(ups); + if (nid->got_caps && !nid->got_static_data) + net_ups_read_static_data(ups); + } - return true; + return !comm_err; } static int get_ups_status_flag(UPSINFO *ups, int fill) @@ -353,7 +346,6 @@ write_lock(ups); answer[0] = 0; if (!getupsvar(ups, "status", answer, sizeof(answer))) { - log_event(ups, LOG_ERR, "getupsvar: failed for " "status" "."); Dmsg0(100, "HEY!!! Couldn't get status flag.\n"); stat = 0; masterStatus = 0; |