Message ID | 20240904014253.2435-1-zhangjiao2@cmss.chinamobile.com (mailing list archive) |
---|---|
State | Handled Elsewhere |
Headers | show |
Series | [v2] tools/counter: Close fd when exit | expand |
On Wed, Sep 4, 2024 at 4:42 AM zhangjiao2 <zhangjiao2@cmss.chinamobile.com> wrote: > Since fd is not used in the messaging it's better to > close it before printing anything. It was my comment which you addressed. Thanks for that. But it does not explain what the problem is.
On Wed, Sep 04, 2024 at 09:42:53AM +0800, zhangjiao2 wrote: > From: zhang jiao <zhangjiao2@cmss.chinamobile.com> > > Since fd is not used in the messaging it's better to > close it before printing anything. Ditto for other cases. > > Signed-off-by: zhang jiao <zhangjiao2@cmss.chinamobile.com> Hello zhang, I appreciate you for submitting this patch. Before I can accept it, I need to understand the reason for it. Previously counter_example.c did call close() before returning, but as David Laight pointed out, we removed it for being redundant when the kernel closes file descriptors on exit, as well as possibly changing errno before perror() and strerror() are called. Is this patch made to address a particular bug you have discovered? I would like to document the rationale for this change in the commit message so we properly understand the reason for calling close() here. Sincerely, William Breathitt Gray
diff --git a/tools/counter/counter_example.c b/tools/counter/counter_example.c index be55287b950f..37569208c235 100644 --- a/tools/counter/counter_example.c +++ b/tools/counter/counter_example.c @@ -57,12 +57,14 @@ int main(void) if (ret == -1) { + close(fd); fprintf(stderr, "Error adding watches[%d]: %s\n", i, strerror(errno)); return 1; } } ret = ioctl(fd, COUNTER_ENABLE_EVENTS_IOCTL); if (ret == -1) { + close(fd); perror("Error enabling events"); return 1; } @@ -70,11 +72,13 @@ int main(void) ret = read(fd, event_data, sizeof(event_data)); if (ret == -1) { + close(fd); perror("Failed to read event data"); return 1; } if (ret != sizeof(event_data)) { + close(fd); fprintf(stderr, "Failed to read event data\n"); return -EIO; } @@ -88,5 +92,6 @@ int main(void) strerror(event_data[1].status)); } + close(fd); return 0; }