On 04/28/2012 05:22 PM, Shevek wrote: >> > - if (join_finished) >> > + if (join_finished || is_master(&cevent->sender)) > I believe this patch does NOT work: > > 1) is_master returns -1 for not-master, 0 means the given node is > master, so this is apparently a misuse of is_master. > > However, even worse: > > 2) If we never got a join response, then line 388: > 388 if (!cevent->blocked && cpg_node_equal(&cevent->sender, > &this_node)) { > never triggered, therefore we have never set join_finished, and > nr_cpg_nodes is always 0 (look for every place where it got set), so > is_master() is always 0. > > So, by inspection, this patch can never work, for both reasons. > Oh, yes. Thanks for pointing it out. But what if set set if (join_finished || (is_master(&cevent->sender >= 0))) done = __corosync_dispatch_one(cevent); else done = !cevent->blocked; Then, the master will be called for sure, and would give other nodes a join response. Thanks, Yuan |