[
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)