opensaf: fix build errors with gcc 5

Backport patches from upstream to fix opensaf build failures with gcc 5.

Signed-off-by: Kai Kang <kai.kang@windriver.com>
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
This commit is contained in:
Kai Kang
2015-08-26 17:05:48 +08:00
committed by Joe MacDonald
parent 43188cd974
commit 9b20fb3f8c
3 changed files with 146 additions and 0 deletions
@@ -0,0 +1,64 @@
Upstream-Status: Backport
Signed-off-by: Kai Kang <kai.kang@windriver.com>
---
# HG changeset patch
# User Anders Widell <anders.widell@ericsson.com>
# Date 1431081180 -7200
# Fri May 08 12:33:00 2015 +0200
# Branch opensaf-4.5.x
# Node ID ee74d1846cadf5c237f420279610968216e3bbe0
# Parent 32079e2039d2a31c1adfbe7eef2e6ee8a2e25810
amf: Fix GCC 5.1.0 compiler warning [#1340]
The following warning was fixed by replacing the case statement with an if
statement:
susm.cc: In function 'uint32_t avnd_evt_avd_su_pres_evh(AVND_CB*, AVND_EVT*)':
susm.cc:1237:26: error: switch condition has type bool [-Werror=switch-bool]
switch (info->term_state) {
^
diff -r 32079e2039d2 -r ee74d1846cad osaf/services/saf/amf/amfnd/susm.cc
--- a/osaf/services/saf/amf/amfnd/susm.cc Fri May 08 12:10:55 2015 +0530
+++ b/osaf/services/saf/amf/amfnd/susm.cc Fri May 08 12:33:00 2015 +0200
@@ -1234,8 +1234,7 @@
goto done;
}
- switch (info->term_state) {
- case true: /* => terminate the su */
+ if (info->term_state) { /* => terminate the su */
/* Stop saAmfSGSuRestartProb timer if started */
if (su->su_err_esc_level == AVND_ERR_ESC_LEVEL_1) {
tmr_su_err_esc_stop(cb, su);
@@ -1269,9 +1268,7 @@
if (NCSCC_RC_SUCCESS != rc)
goto done;
}
- break;
-
- case false: /* => instantiate the su */
+ } else { /* => instantiate the su */
TRACE("SU term state is set to false");
/* Reset admn term operation flag */
m_AVND_SU_ADMN_TERM_RESET(su);
@@ -1299,7 +1296,7 @@
/* Will transition to instantiation-failed when instantiated */
LOG_ER("'%s':FAILED", __FUNCTION__);
rc = NCSCC_RC_FAILURE;
- break;
+ goto done;
}
/* trigger su instantiation for pi su */
if (m_AVND_SU_IS_PREINSTANTIABLE(su)) {
@@ -1315,8 +1312,7 @@
} else
osafassert(0);
}
- break;
- } /* switch */
+ }
done:
TRACE_LEAVE2("%u", rc);
@@ -0,0 +1,80 @@
Upstream-Status: Backport
Signed-off-by: Kai Kang <kai.kang@windriver.com>
---
# HG changeset patch
# User Anders Bjornerstedt <anders.bjornerstedt@ericsson.com>
# Date 1430120883 -7200
# Mon Apr 27 09:48:03 2015 +0200
# Branch opensaf-4.6.x
# Node ID 97eb2e7b29bbe0aacee0ad9b13cf84f1a4d5d9b0
# Parent 60b2136fcadf82f653b43ba1b5790f6dc3be3161
immsv: Revert imma_client_node->replyPending to unsigned char [#1341]
The member imma_client_node->replyPending was in OpenSAF4.1 and earlier
defined as 'uns8', i.e. a byte. But this member is a counter and not a boolean.
The uns8 type was often used as a proxy for a boolean type in OpenSAF 4.1 and
earlier. This was before 'bool' was available as a first class type for gcc.
At some point in OpenSAF 4.2 the bool C type became available in gcc. There
was then a general sweep across all services to change the use of uns8 to bool.
The replyPending member was swept along in this change, but code actually
still increments and decrements the value, which makes no sense for a boolean
type.
The intent of the replyPending member is to keep track of outstanding
replies on requests from imma library to immnd server using the handle.
This so that a restart of the local IMMND will result in the handle being
marked as 'exposed' and not resurrected.
An IMMND restart will mean that any unreplied requests will have lost
their replies. This violates the interface contract from the imm service
side towards the client using the handle and so the handle must not be
allowed to get resurrected. Instead the handle must be marked as exposed.
The client will then get an ERR_BAD_HANDLE from either saImmOxDispatch
(failed active resurrect) or from the next syncronous downcall made after
IMMND went down (failed reactive resurrect).
For syncronous requests, the count will only go from 0 to 1 and back to 0 on
reply. This ticket does not affect syncronous requests. For asyncronous
requests it is possible for the client to invoke more than one request,
before entering poll to receive replies. For asyncronous requests the
replyPending member must work as a counter and not a boolean. The effect
of being a boolean is that a handle may get resurrected when there is
still asyncronous requests unreplied to, i.e. the replies would get silently
lost.
This changeset restores the type of the repliesPending member to unsigned char.
diff -r 60b2136fcadf -r 97eb2e7b29bb osaf/libs/agents/saf/imma/imma_cb.h
--- a/osaf/libs/agents/saf/imma/imma_cb.h Fri Apr 24 14:40:09 2015 +0200
+++ b/osaf/libs/agents/saf/imma/imma_cb.h Mon Apr 27 09:48:03 2015 +0200
@@ -50,13 +50,13 @@
SaUint32T mImplementerId; /*Only used for OI.*/
SaImmOiImplementerNameT mImplementerName; /* needed for active resurrect*/
SaUint32T syncr_timeout;/* Timeout on syncr downcalls, dflt 10s, or setenv IMMA_SYNCR_TIMEOUT */
+ unsigned char replyPending; /* Syncronous or asyncronous call made towards IMMND */
bool isOm; /*If true => then this is an OM client */
bool stale; /*Loss of connection with immnd
will set this to true for the
connection. A resurrect can remove it.*/
bool exposed; /* Exposed => stale is irreversible */
bool selObjUsable; /* Active resurrect possible for this client */
- bool replyPending; /* Syncronous or asyncronous call made towards IMMND */
bool isPbe; /* True => This is the PBE-OI */
bool isImmA2b; /* Version A.02.11 */
bool isImmA2bCbk; /* Version A.02.11 callback*/
diff -r 60b2136fcadf -r 97eb2e7b29bb osaf/libs/agents/saf/imma/imma_proc.c
--- a/osaf/libs/agents/saf/imma/imma_proc.c Fri Apr 24 14:40:09 2015 +0200
+++ b/osaf/libs/agents/saf/imma/imma_proc.c Mon Apr 27 09:48:03 2015 +0200
@@ -3346,7 +3346,10 @@
cl_node->handle);
}
} else {
- /* Reaching 255 is sticky. */
+ /* Decrementing from zero implies a bug in the library logic.
+ The real count has been lost. Set the value to 255. This does not
+ disturb current function, but makes the handle not resurrectable in
+ case of iMMND restart while handle is still open. */
TRACE_3("Will not decrement zero pending reply count for handle %llx",
cl_node->handle);
cl_node->replyPending = 0xff;
@@ -18,6 +18,8 @@ SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/releases/${BPN}-${PV}.tar.gz \
file://plmcd.service \ file://plmcd.service \
file://plmcboot.service \ file://plmcboot.service \
file://0001-plmcd-error-fix.patch \ file://0001-plmcd-error-fix.patch \
file://Revert_imma_client_node_replyPending_to_unsigned_char.patch \
file://Fix_GCC_5.1.0_compiler_warning.patch \
" "
SRC_URI[md5sum] = "a1ceddb517c0972aa7e899b092d7f464" SRC_URI[md5sum] = "a1ceddb517c0972aa7e899b092d7f464"