[ 
https://issues.apache.org/jira/browse/ZOOKEEPER-2628?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15648178#comment-15648178
 ] 

ASF GitHub Bot commented on ZOOKEEPER-2628:
-------------------------------------------

Github user eribeiro commented on a diff in the pull request:

    https://github.com/apache/zookeeper/pull/102#discussion_r87038798
  
    --- Diff: src/java/main/org/apache/jute/compiler/JRecord.java ---
    @@ -141,109 +141,128 @@ public String genCsharpWriteWrapper(String fname, 
String tag) {
     
         static HashMap<String, String> vectorStructs = new HashMap<String, 
String>();
         public void genCCode(FileWriter h, FileWriter c) throws IOException {
    -        for (JField f : mFields) {
    -            if (f.getType() instanceof JVector) {
    -                JVector jv = (JVector)f.getType();
    -                JType jvType = jv.getElementType();
    -                String struct_name = JVector.extractVectorName(jvType);
    -                if (vectorStructs.get(struct_name) == null) {
    -                    vectorStructs.put(struct_name, struct_name);
    -                    h.write("struct " + struct_name + " {\n    int32_t 
count;\n" + jv.getElementType().genCDecl("*data") + "\n};\n");
    -                    h.write("int serialize_" + struct_name + "(struct 
oarchive *out, const char *tag, struct " + struct_name + " *v);\n");
    -                    h.write("int deserialize_" + struct_name + "(struct 
iarchive *in, const char *tag, struct " + struct_name + " *v);\n");
    -                    h.write("int allocate_" + struct_name + "(struct " + 
struct_name + " *v, int32_t len);\n");
    -                    h.write("int deallocate_" + struct_name + "(struct " + 
struct_name + " *v);\n");
    -                    c.write("int allocate_" + struct_name + "(struct " + 
struct_name + " *v, int32_t len) {\n");
    -                    c.write("    if (!len) {\n");
    -                    c.write("        v->count = 0;\n");
    -                    c.write("        v->data = 0;\n");
    -                    c.write("    } else {\n");
    -                    c.write("        v->count = len;\n");
    -                    c.write("        v->data = calloc(sizeof(*v->data), 
len);\n");
    -                    c.write("    }\n");
    -                    c.write("    return 0;\n");
    -                    c.write("}\n");
    -                    c.write("int deallocate_" + struct_name + "(struct " + 
struct_name + " *v) {\n");
    -                    c.write("    if (v->data) {\n");
    -                    c.write("        int32_t i;\n");
    -                    c.write("        for(i=0;i<v->count; i++) {\n");
    -                    c.write("            
deallocate_"+JRecord.extractMethodSuffix(jvType)+"(&v->data[i]);\n");
    -                    c.write("        }\n");
    -                    c.write("        free(v->data);\n");
    -                    c.write("        v->data = 0;\n");
    -                    c.write("    }\n");
    -                    c.write("    return 0;\n");
    -                    c.write("}\n");
    -                    c.write("int serialize_" + struct_name + "(struct 
oarchive *out, const char *tag, struct " + struct_name + " *v)\n");
    -                    c.write("{\n");
    -                    c.write("    int32_t count = v->count;\n");
    -                    c.write("    int rc = 0;\n");
    -                    c.write("    int32_t i;\n");
    -                    c.write("    rc = out->start_vector(out, tag, 
&count);\n");
    -                    c.write("    for(i=0;i<v->count;i++) {\n");
    -                    genSerialize(c, jvType, "data", "data[i]");
    -                    c.write("    }\n");
    -                    c.write("    rc = rc ? rc : out->end_vector(out, 
tag);\n");
    -                    c.write("    return rc;\n");
    -                    c.write("}\n");
    -                    c.write("int deserialize_" + struct_name + "(struct 
iarchive *in, const char *tag, struct " + struct_name + " *v)\n");
    -                    c.write("{\n");
    -                    c.write("    int rc = 0;\n");
    -                    c.write("    int32_t i;\n");
    -                    c.write("    rc = in->start_vector(in, tag, 
&v->count);\n");
    -                    c.write("    v->data = calloc(v->count, 
sizeof(*v->data));\n");
    -                    c.write("    for(i=0;i<v->count;i++) {\n");
    -                    genDeserialize(c, jvType, "value", "data[i]");
    -                    c.write("    }\n");
    -                    c.write("    rc = in->end_vector(in, tag);\n");
    -                    c.write("    return rc;\n");
    -                    c.write("}\n");
    -
    +        try {
    +            for (JField f : mFields) {
    +                if (f.getType() instanceof JVector) {
    +                    JVector jv = (JVector) f.getType();
    +                    JType jvType = jv.getElementType();
    +                    String struct_name = JVector.extractVectorName(jvType);
    +                    if (vectorStructs.get(struct_name) == null) {
    +                        vectorStructs.put(struct_name, struct_name);
    +                        h.write("struct " + struct_name + " {\n    int32_t 
count;\n" + jv.getElementType().genCDecl("*data") + "\n};\n");
    +                        h.write("int serialize_" + struct_name + "(struct 
oarchive *out, const char *tag, struct " + struct_name + " *v);\n");
    +                        h.write("int deserialize_" + struct_name + 
"(struct iarchive *in, const char *tag, struct " + struct_name + " *v);\n");
    +                        h.write("int allocate_" + struct_name + "(struct " 
+ struct_name + " *v, int32_t len);\n");
    +                        h.write("int deallocate_" + struct_name + "(struct 
" + struct_name + " *v);\n");
    +                        c.write("int allocate_" + struct_name + "(struct " 
+ struct_name + " *v, int32_t len) {\n");
    +                        c.write("    if (!len) {\n");
    +                        c.write("        v->count = 0;\n");
    +                        c.write("        v->data = 0;\n");
    +                        c.write("    } else {\n");
    +                        c.write("        v->count = len;\n");
    +                        c.write("        v->data = 
calloc(sizeof(*v->data), len);\n");
    +                        c.write("    }\n");
    +                        c.write("    return 0;\n");
    +                        c.write("}\n");
    +                        c.write("int deallocate_" + struct_name + "(struct 
" + struct_name + " *v) {\n");
    +                        c.write("    if (v->data) {\n");
    +                        c.write("        int32_t i;\n");
    +                        c.write("        for(i=0;i<v->count; i++) {\n");
    +                        c.write("            deallocate_" + 
JRecord.extractMethodSuffix(jvType) + "(&v->data[i]);\n");
    +                        c.write("        }\n");
    +                        c.write("        free(v->data);\n");
    +                        c.write("        v->data = 0;\n");
    +                        c.write("    }\n");
    +                        c.write("    return 0;\n");
    +                        c.write("}\n");
    +                        c.write("int serialize_" + struct_name + "(struct 
oarchive *out, const char *tag, struct " + struct_name + " *v)\n");
    +                        c.write("{\n");
    +                        c.write("    int32_t count = v->count;\n");
    +                        c.write("    int rc = 0;\n");
    +                        c.write("    int32_t i;\n");
    +                        c.write("    rc = out->start_vector(out, tag, 
&count);\n");
    +                        c.write("    for(i=0;i<v->count;i++) {\n");
    +                        genSerialize(c, jvType, "data", "data[i]");
    +                        c.write("    }\n");
    +                        c.write("    rc = rc ? rc : out->end_vector(out, 
tag);\n");
    +                        c.write("    return rc;\n");
    +                        c.write("}\n");
    +                        c.write("int deserialize_" + struct_name + 
"(struct iarchive *in, const char *tag, struct " + struct_name + " *v)\n");
    +                        c.write("{\n");
    +                        c.write("    int rc = 0;\n");
    +                        c.write("    int32_t i;\n");
    +                        c.write("    rc = in->start_vector(in, tag, 
&v->count);\n");
    +                        c.write("    v->data = calloc(v->count, 
sizeof(*v->data));\n");
    +                        c.write("    for(i=0;i<v->count;i++) {\n");
    +                        genDeserialize(c, jvType, "value", "data[i]");
    +                        c.write("    }\n");
    +                        c.write("    rc = in->end_vector(in, tag);\n");
    +                        c.write("    return rc;\n");
    +                        c.write("}\n");
    +
    +                    }
                     }
                 }
    -        }
    -        String rec_name = getName();
    -        h.write("struct " + rec_name + " {\n");
    -        for (JField f : mFields) {
    -            h.write(f.genCDecl());
    -        }
    -        h.write("};\n");
    -        h.write("int serialize_" + rec_name + "(struct oarchive *out, 
const char *tag, struct " + rec_name + " *v);\n");
    -        h.write("int deserialize_" + rec_name + "(struct iarchive *in, 
const char *tag, struct " + rec_name + "*v);\n");
    -        h.write("void deallocate_" + rec_name + "(struct " + rec_name + 
"*);\n");
    -        c.write("int serialize_" + rec_name + "(struct oarchive *out, 
const char *tag, struct " + rec_name + " *v)");
    -        c.write("{\n");
    -        c.write("    int rc;\n");
    -        c.write("    rc = out->start_record(out, tag);\n");
    -        for(JField f : mFields) {
    -            genSerialize(c, f.getType(), f.getTag(), f.getName());
    -        }
    -        c.write("    rc = rc ? rc : out->end_record(out, tag);\n");
    -        c.write("    return rc;\n");
    -        c.write("}\n");
    -        c.write("int deserialize_" + rec_name + "(struct iarchive *in, 
const char *tag, struct " + rec_name + "*v)");
    -        c.write("{\n");
    -        c.write("    int rc;\n");
    -        c.write("    rc = in->start_record(in, tag);\n");
    -        for(JField f : mFields) {
    -            genDeserialize(c, f.getType(), f.getTag(), f.getName());
    -        }
    -        c.write("    rc = rc ? rc : in->end_record(in, tag);\n");
    -        c.write("    return rc;\n");
    -        c.write("}\n");
    -        c.write("void deallocate_" + rec_name + "(struct " + rec_name + 
"*v)");
    -        c.write("{\n");
    -        for(JField f : mFields) {
    -            if (f.getType() instanceof JRecord) {
    -                c.write("    deallocate_" + extractStructName(f.getType()) 
+ "(&v->" + f.getName() + ");\n");
    -            } else if (f.getType() instanceof JVector) {
    -                JVector vt = (JVector)f.getType();
    -                c.write("    deallocate_" + 
JVector.extractVectorName(vt.getElementType())+ "(&v->"+f.getName()+");\n");
    -            } else if (f.getType() instanceof JCompType) {
    -                c.write("    deallocate_" + 
extractMethodSuffix(f.getType()) + "(&v->"+f.getName()+");\n");
    +            String rec_name = getName();
    +            h.write("struct " + rec_name + " {\n");
    +            for (JField f : mFields) {
    +                h.write(f.genCDecl());
    +            }
    +            h.write("};\n");
    +            h.write("int serialize_" + rec_name + "(struct oarchive *out, 
const char *tag, struct " + rec_name + " *v);\n");
    +            h.write("int deserialize_" + rec_name + "(struct iarchive *in, 
const char *tag, struct " + rec_name + "*v);\n");
    +            h.write("void deallocate_" + rec_name + "(struct " + rec_name 
+ "*);\n");
    +            c.write("int serialize_" + rec_name + "(struct oarchive *out, 
const char *tag, struct " + rec_name + " *v)");
    +            c.write("{\n");
    +            c.write("    int rc;\n");
    +            c.write("    rc = out->start_record(out, tag);\n");
    +            for (JField f : mFields) {
    +                genSerialize(c, f.getType(), f.getTag(), f.getName());
    +            }
    +            c.write("    rc = rc ? rc : out->end_record(out, tag);\n");
    +            c.write("    return rc;\n");
    +            c.write("}\n");
    +            c.write("int deserialize_" + rec_name + "(struct iarchive *in, 
const char *tag, struct " + rec_name + "*v)");
    +            c.write("{\n");
    +            c.write("    int rc;\n");
    +            c.write("    rc = in->start_record(in, tag);\n");
    +            for (JField f : mFields) {
    +                genDeserialize(c, f.getType(), f.getTag(), f.getName());
    +            }
    +            c.write("    rc = rc ? rc : in->end_record(in, tag);\n");
    +            c.write("    return rc;\n");
    +            c.write("}\n");
    +            c.write("void deallocate_" + rec_name + "(struct " + rec_name 
+ "*v)");
    +            c.write("{\n");
    +            for (JField f : mFields) {
    +                if (f.getType() instanceof JRecord) {
    +                    c.write("    deallocate_" + 
extractStructName(f.getType()) + "(&v->" + f.getName() + ");\n");
    +                } else if (f.getType() instanceof JVector) {
    +                    JVector vt = (JVector) f.getType();
    +                    c.write("    deallocate_" + 
JVector.extractVectorName(vt.getElementType()) + "(&v->" + f.getName() + 
");\n");
    +                } else if (f.getType() instanceof JCompType) {
    +                    c.write("    deallocate_" + 
extractMethodSuffix(f.getType()) + "(&v->" + f.getName() + ");\n");
    +                }
    +            }
    +            c.write("}\n");
    +        } catch (IOException e) {
    +            throw e;
    +        } finally {
    +            if (h != null) {
    --- End diff --
    
    Just speculating here: couldn't we write this snippet as:
    
    ```
    private IOException maybeClose(FileWriter file) {
           IOException t = null;
           if (file != null) {
                 try {
                         file.close();
                 } catch (IOException ex) {
                       t = ex;
                 }          
         }
        return t;
    }
    
    (...)
    
    } finally {
    
        IOException e1 = maybeClose(h);
        IOException e2 = maybeClose(c);
    
        if (e1 != null) {
            throw e1;
        }
    
       if (e2 != null) {
           throw e2;
       }
    }
    
    
    ```


> Investigate and fix findbug warnings
> ------------------------------------
>
>                 Key: ZOOKEEPER-2628
>                 URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2628
>             Project: ZooKeeper
>          Issue Type: Bug
>    Affects Versions: 3.5.2
>            Reporter: Michael Han
>             Fix For: 3.5.3
>
>
> Findbug tool used by Jenkins bot is upgraded to 3.0.1 from 2.0.3 according to 
> Infra team, and this leads to 20 new warnings produced by findbug. The 
> warning reports can be found on [pre commit 
> builds|https://builds.apache.org/job/PreCommit-ZOOKEEPER-Build/] with build 
> number >= 3513. These warnings need to be triaged and fixed if they are 
> legitimate.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to