mirror of
https://github.com/ipmitool/ipmitool.git
synced 2026-01-22 22:52:20 +08:00
Roger Mach's 12/11/08 patch to fix lan and lanplus request list entry removal bugs
This commit is contained in:
parent
e31ba93a23
commit
a1684a2e0b
@ -146,7 +146,7 @@ ipmi_req_lookup_entry(uint8_t seq, uint8_t cmd)
|
|||||||
static void
|
static void
|
||||||
ipmi_req_remove_entry(uint8_t seq, uint8_t cmd)
|
ipmi_req_remove_entry(uint8_t seq, uint8_t cmd)
|
||||||
{
|
{
|
||||||
struct ipmi_rq_entry * p, * e;
|
struct ipmi_rq_entry * p, * e, * saved_next_entry;
|
||||||
|
|
||||||
e = p = ipmi_req_entries;
|
e = p = ipmi_req_entries;
|
||||||
|
|
||||||
@ -157,13 +157,16 @@ ipmi_req_remove_entry(uint8_t seq, uint8_t cmd)
|
|||||||
if (e) {
|
if (e) {
|
||||||
lprintf(LOG_DEBUG+3, "removed list entry seq=0x%02x cmd=0x%02x",
|
lprintf(LOG_DEBUG+3, "removed list entry seq=0x%02x cmd=0x%02x",
|
||||||
seq, cmd);
|
seq, cmd);
|
||||||
|
saved_next_entry = e->next;
|
||||||
p->next = (p->next == e->next) ? NULL : e->next;
|
p->next = (p->next == e->next) ? NULL : e->next;
|
||||||
|
/* If entry being removed is first in list, fix up list head */
|
||||||
if (ipmi_req_entries == e) {
|
if (ipmi_req_entries == e) {
|
||||||
if (ipmi_req_entries != p)
|
if (ipmi_req_entries != p)
|
||||||
ipmi_req_entries = p;
|
ipmi_req_entries = p;
|
||||||
else
|
else
|
||||||
ipmi_req_entries = NULL;
|
ipmi_req_entries = saved_next_entry;
|
||||||
}
|
}
|
||||||
|
/* If entry being removed is last in list, fix up list tail */
|
||||||
if (ipmi_req_entries_tail == e) {
|
if (ipmi_req_entries_tail == e) {
|
||||||
if (ipmi_req_entries_tail != p)
|
if (ipmi_req_entries_tail != p)
|
||||||
ipmi_req_entries_tail = p;
|
ipmi_req_entries_tail = p;
|
||||||
|
|||||||
@ -321,7 +321,7 @@ ipmi_req_lookup_entry(uint8_t seq, uint8_t cmd)
|
|||||||
static void
|
static void
|
||||||
ipmi_req_remove_entry(uint8_t seq, uint8_t cmd)
|
ipmi_req_remove_entry(uint8_t seq, uint8_t cmd)
|
||||||
{
|
{
|
||||||
struct ipmi_rq_entry * p, * e;
|
struct ipmi_rq_entry * p, * e, * saved_next_entry;
|
||||||
|
|
||||||
e = p = ipmi_req_entries;
|
e = p = ipmi_req_entries;
|
||||||
|
|
||||||
@ -332,13 +332,16 @@ ipmi_req_remove_entry(uint8_t seq, uint8_t cmd)
|
|||||||
if (e) {
|
if (e) {
|
||||||
lprintf(LOG_DEBUG+3, "removed list entry seq=0x%02x cmd=0x%02x",
|
lprintf(LOG_DEBUG+3, "removed list entry seq=0x%02x cmd=0x%02x",
|
||||||
seq, cmd);
|
seq, cmd);
|
||||||
|
saved_next_entry = e->next;
|
||||||
p->next = (p->next == e->next) ? NULL : e->next;
|
p->next = (p->next == e->next) ? NULL : e->next;
|
||||||
|
/* If entry being removed is first in list, fix up list head */
|
||||||
if (ipmi_req_entries == e) {
|
if (ipmi_req_entries == e) {
|
||||||
if (ipmi_req_entries != p)
|
if (ipmi_req_entries != p)
|
||||||
ipmi_req_entries = p;
|
ipmi_req_entries = p;
|
||||||
else
|
else
|
||||||
ipmi_req_entries = NULL;
|
ipmi_req_entries = saved_next_entry;
|
||||||
}
|
}
|
||||||
|
/* If entry being removed is last in list, fix up list tail */
|
||||||
if (ipmi_req_entries_tail == e) {
|
if (ipmi_req_entries_tail == e) {
|
||||||
if (ipmi_req_entries_tail != p)
|
if (ipmi_req_entries_tail != p)
|
||||||
ipmi_req_entries_tail = p;
|
ipmi_req_entries_tail = p;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user