> On Sun, 2009-02-15 at 02:05 +0900, Masatake YAMATO wrote:
> > Hi,
> > 
> > Could you merge this patch if it is correct?
> > 
> 
> The optimizer benefits from the else on some archs/compilers and it
> doesn't cause any harm so I am inclined to leave it the way it is.

I think the 'else' causes harm.

Look at the local variable `start'.

`start' is initialized to 0.
Then `start' is set to 1 in "if (throw_away_mode == THROW_AWAY_ACTIVE) {}" 
block.

The value of `start' is refereed in "if (throw_away_mode ==
THROW_AWAY_INACTIVE) {}" block.

If the "else" is there, start is always 0 in 
"if (throw_away_mode == THROW_AWAY_INACTIVE) {}".
I could not understand why `start' is set to 1 in 
"if (throw_away_mode == THROW_AWAY_ACTIVE) {}"

Masatake YAMATO


    static void totempg_deliver_fn (
            unsigned int nodeid,
            struct iovec *iovec,
            int iov_len,
            int endian_conversion_required)
    {
            struct totempg_mcast *mcast;
            unsigned short *msg_lens;
            int i;
            struct assembly *assembly;
            char header[FRAME_SIZE_MAX];
            int h_index;
            int a_i = 0;
            int msg_count;
            int continuation;
            int start;

            /*
             * Make sure that if this message is a continuation, that it
             * matches the sequence number of the previous fragment.
             * Also, if the first packed message is a continuation
             * of a previous message, but the assembly buffer
             * is empty, then we need to discard it since we can't
             * assemble a complete message. Likewise, if this message isn't a 
             * continuation and the assembly buffer is empty, we have to discard
             * the continued message.
             */
            start = 0;

            if (throw_away_mode == THROW_AWAY_ACTIVE) {
                     /* Throw away the first msg block */
                    if (mcast->fragmented == 0 || mcast->fragmented == 1) {
                            throw_away_mode = THROW_AWAY_INACTIVE;

                            assembly->index += msg_lens[0];
                            iov_delv.iov_base = 
&assembly->data[assembly->index];
                            iov_delv.iov_len = msg_lens[1];
                            start = 1;
                    }
            } else 
            if (throw_away_mode == THROW_AWAY_INACTIVE) {
                    if (continuation == assembly->last_frag_num) {
                            assembly->last_frag_num = mcast->fragmented;
                            for  (i = start; i < msg_count; i++) {
_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to