@@ -102,14 +102,15 @@ MtmCheckState(void)
102
102
// XXXX: should we restrict major with two nodes setup?
103
103
|| (nConnected == Mtm -> nAllNodes /2 && MtmMajorNode )/* or half + major node */
104
104
|| (nConnected == Mtm -> nAllNodes /2 && Mtm -> refereeGrant ) )/* or half + referee */
105
- && BIT_CHECK (Mtm -> clique ,MtmNodeId - 1 )/* in clique */
105
+ && ( BIT_CHECK (Mtm -> clique ,MtmNodeId - 1 )|| Mtm -> refereeGrant ) /* in clique when non-major */
106
106
&& !BIT_CHECK (Mtm -> stoppedNodeMask ,MtmNodeId - 1 );/* is not stopped */
107
107
108
108
/* ANY -> MTM_DISABLED */
109
109
if (!isEnabledState )
110
110
{
111
- BIT_SET (Mtm -> disabledNodeMask ,MtmNodeId - 1 );
111
+ // BIT_SET(Mtm->disabledNodeMask, MtmNodeId-1);
112
112
MtmSetClusterStatus (MTM_DISABLED );
113
+ MtmDisableNode (MtmNodeId );
113
114
return ;
114
115
}
115
116
@@ -311,9 +312,9 @@ void MtmOnNodeDisconnect(int nodeId)
311
312
* We should disable it, as clique detector will not necessarily
312
313
* do that. For example it will anyway find clique with one node.
313
314
*/
314
- MtmDisableNode (nodeId );
315
315
316
316
MtmLock (LW_EXCLUSIVE );
317
+ MtmDisableNode (nodeId );
317
318
BIT_SET (SELF_CONNECTIVITY_MASK ,nodeId - 1 );
318
319
BIT_SET (Mtm -> reconnectMask ,nodeId - 1 );
319
320
Mtm -> nConfigChanges += 1 ;