Re: [devel] [PATCH 1 of 1] log: write_log_record_hdl get bad file descriptor [#2028]
Ok, ACK. -AVM On 10/12/2016 12:27 PM, Vu Minh Nguyen wrote: > Hi Mahesh, > > In README file, there is a note on this. Refer to "Note on memory handling > for writting log record" > > And caller here means the one that call the function `log_stream_write_h`, > not log client. > > Regards, Vu > >> -Original Message- >> From: A V Mahesh [mailto:mahesh.va...@oracle.com] >> Sent: Wednesday, October 12, 2016 1:47 PM >> To: Vu Minh Nguyen; >> lennart.l...@ericsson.com >> Cc: opensaf-devel@lists.sourceforge.net >> Subject: Re: [PATCH 1 of 1] log: write_log_record_hdl get bad file > descriptor >> [#2028] >> >> Hi Vu, >> >> `Return (-1) to inform that it is caller's responsibility to free the >> allocated mem` is this existing practices for application ? >> or new , if new do we need to document it . >> >> -AVM >> >> On 10/12/2016 10:14 AM, A V Mahesh wrote: >>> ACK >>> >>> -AVM >>> >>> >>> On 9/13/2016 4:19 PM, Vu Minh Nguyen wrote: osaf/services/saf/logsv/lgs/lgs_filehdl.cc | 16 +++- osaf/services/saf/logsv/lgs/lgs_stream.cc | 6 ++ 2 files changed, 17 insertions(+), 5 deletions(-) logsv did pass the WRITE request to file handle thread even the file descriptor was invalid. Also, when closing file, the file handle thread did not set it to invalid. This patch fixes these things. diff --git a/osaf/services/saf/logsv/lgs/lgs_filehdl.cc b/osaf/services/saf/logsv/lgs/lgs_filehdl.cc --- a/osaf/services/saf/logsv/lgs/lgs_filehdl.cc +++ b/osaf/services/saf/logsv/lgs/lgs_filehdl.cc @@ -467,16 +467,15 @@ open_retry: */ int fileclose_hdl(void *indata, void *outdata, size_t max_outsize) { int rc = 0; - int fd; + int *fd = static_cast(indata); - fd = *static_cast(indata); - TRACE_ENTER2("fd=%d", fd); + TRACE_ENTER2("fd=%d", *fd); osaf_mutex_unlock_ordie(_ftcom_mutex); /* UNLOCK critical section */ /* Flush and synchronize the file before closing to guaranty that the file * is not written to after it's closed */ - if ((rc = fdatasync(fd)) == -1) { + if ((rc = fdatasync(*fd)) == -1) { if ((errno == EROFS) || (errno == EINVAL)) { TRACE("Synchronization is not supported for this file"); } else { @@ -485,9 +484,16 @@ int fileclose_hdl(void *indata, void *ou } /* Close the file */ - rc = close(fd); + rc = close(*fd); if (rc == -1) { LOG_ER("fileclose() %s",strerror(errno)); + } else { +// When file system is busy, operations on files will take time. +// In that case, file handle thread will get timeout and the `requester` +// will put the `fd` into one link list to do retry next time. +// But if closing file succesfully, let the `requester` knows and +// no need to send `close file request` again. +*fd = -1; } osaf_mutex_lock_ordie(_ftcom_mutex); /* LOCK after critical section */ diff --git a/osaf/services/saf/logsv/lgs/lgs_stream.cc b/osaf/services/saf/logsv/lgs/lgs_stream.cc --- a/osaf/services/saf/logsv/lgs/lgs_stream.cc +++ b/osaf/services/saf/logsv/lgs/lgs_stream.cc @@ -1122,6 +1122,12 @@ int log_stream_write_h(log_stream_t *str if (*stream->p_fd == -1) { TRACE("%s - Initiating stream files \"%s\" Failed", __FUNCTION__, stream->name.c_str()); + // Seems file system is busy - can not create requrested files. + // Let inform the log client TRY_AGAIN. + // + // Return (-1) to inform that it is caller's responsibility + // to free the allocated memmories. + return -1; } else { TRACE("%s - stream files initiated", __FUNCTION__); } > -- Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel
Re: [devel] [PATCH 1 of 1] log: write_log_record_hdl get bad file descriptor [#2028]
Hi Mahesh, In README file, there is a note on this. Refer to "Note on memory handling for writting log record" And caller here means the one that call the function `log_stream_write_h`, not log client. Regards, Vu > -Original Message- > From: A V Mahesh [mailto:mahesh.va...@oracle.com] > Sent: Wednesday, October 12, 2016 1:47 PM > To: Vu Minh Nguyen; > lennart.l...@ericsson.com > Cc: opensaf-devel@lists.sourceforge.net > Subject: Re: [PATCH 1 of 1] log: write_log_record_hdl get bad file descriptor > [#2028] > > Hi Vu, > > `Return (-1) to inform that it is caller's responsibility to free the > allocated mem` is this existing practices for application ? > or new , if new do we need to document it . > > -AVM > > On 10/12/2016 10:14 AM, A V Mahesh wrote: > > ACK > > > > -AVM > > > > > > On 9/13/2016 4:19 PM, Vu Minh Nguyen wrote: > >> osaf/services/saf/logsv/lgs/lgs_filehdl.cc | 16 +++- > >> osaf/services/saf/logsv/lgs/lgs_stream.cc | 6 ++ > >> 2 files changed, 17 insertions(+), 5 deletions(-) > >> > >> > >> logsv did pass the WRITE request to file handle thread even > >> the file descriptor was invalid. Also, when closing file, > >> the file handle thread did not set it to invalid. > >> > >> This patch fixes these things. > >> > >> diff --git a/osaf/services/saf/logsv/lgs/lgs_filehdl.cc > >> b/osaf/services/saf/logsv/lgs/lgs_filehdl.cc > >> --- a/osaf/services/saf/logsv/lgs/lgs_filehdl.cc > >> +++ b/osaf/services/saf/logsv/lgs/lgs_filehdl.cc > >> @@ -467,16 +467,15 @@ open_retry: > >>*/ > >> int fileclose_hdl(void *indata, void *outdata, size_t max_outsize) { > >> int rc = 0; > >> - int fd; > >> + int *fd = static_cast(indata); > >> - fd = *static_cast(indata); > >> - TRACE_ENTER2("fd=%d", fd); > >> + TRACE_ENTER2("fd=%d", *fd); > >> osaf_mutex_unlock_ordie(_ftcom_mutex); /* UNLOCK critical > >> section */ > >> /* Flush and synchronize the file before closing to guaranty that > >> the file > >> * is not written to after it's closed > >> */ > >> - if ((rc = fdatasync(fd)) == -1) { > >> + if ((rc = fdatasync(*fd)) == -1) { > >> if ((errno == EROFS) || (errno == EINVAL)) { > >> TRACE("Synchronization is not supported for this file"); > >> } else { > >> @@ -485,9 +484,16 @@ int fileclose_hdl(void *indata, void *ou > >> } > >> /* Close the file */ > >> - rc = close(fd); > >> + rc = close(*fd); > >> if (rc == -1) { > >> LOG_ER("fileclose() %s",strerror(errno)); > >> + } else { > >> +// When file system is busy, operations on files will take time. > >> +// In that case, file handle thread will get timeout and the > >> `requester` > >> +// will put the `fd` into one link list to do retry next time. > >> +// But if closing file succesfully, let the `requester` knows and > >> +// no need to send `close file request` again. > >> +*fd = -1; > >> } > >> osaf_mutex_lock_ordie(_ftcom_mutex); /* LOCK after critical > >> section */ > >> diff --git a/osaf/services/saf/logsv/lgs/lgs_stream.cc > >> b/osaf/services/saf/logsv/lgs/lgs_stream.cc > >> --- a/osaf/services/saf/logsv/lgs/lgs_stream.cc > >> +++ b/osaf/services/saf/logsv/lgs/lgs_stream.cc > >> @@ -1122,6 +1122,12 @@ int log_stream_write_h(log_stream_t *str > >> if (*stream->p_fd == -1) { > >> TRACE("%s - Initiating stream files \"%s\" Failed", > >> __FUNCTION__, > >> stream->name.c_str()); > >> + // Seems file system is busy - can not create requrested files. > >> + // Let inform the log client TRY_AGAIN. > >> + // > >> + // Return (-1) to inform that it is caller's responsibility > >> + // to free the allocated memmories. > >> + return -1; > >> } else { > >> TRACE("%s - stream files initiated", __FUNCTION__); > >> } > > -- Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel
Re: [devel] [PATCH 1 of 1] log: write_log_record_hdl get bad file descriptor [#2028]
Hi Vu, `Return (-1) to inform that it is caller's responsibility to free the allocated mem` is this existing practices for application ? or new , if new do we need to document it . -AVM On 10/12/2016 10:14 AM, A V Mahesh wrote: > ACK > > -AVM > > > On 9/13/2016 4:19 PM, Vu Minh Nguyen wrote: >> osaf/services/saf/logsv/lgs/lgs_filehdl.cc | 16 +++- >> osaf/services/saf/logsv/lgs/lgs_stream.cc | 6 ++ >> 2 files changed, 17 insertions(+), 5 deletions(-) >> >> >> logsv did pass the WRITE request to file handle thread even >> the file descriptor was invalid. Also, when closing file, >> the file handle thread did not set it to invalid. >> >> This patch fixes these things. >> >> diff --git a/osaf/services/saf/logsv/lgs/lgs_filehdl.cc >> b/osaf/services/saf/logsv/lgs/lgs_filehdl.cc >> --- a/osaf/services/saf/logsv/lgs/lgs_filehdl.cc >> +++ b/osaf/services/saf/logsv/lgs/lgs_filehdl.cc >> @@ -467,16 +467,15 @@ open_retry: >>*/ >> int fileclose_hdl(void *indata, void *outdata, size_t max_outsize) { >> int rc = 0; >> - int fd; >> + int *fd = static_cast(indata); >> - fd = *static_cast(indata); >> - TRACE_ENTER2("fd=%d", fd); >> + TRACE_ENTER2("fd=%d", *fd); >> osaf_mutex_unlock_ordie(_ftcom_mutex); /* UNLOCK critical >> section */ >> /* Flush and synchronize the file before closing to guaranty that >> the file >> * is not written to after it's closed >> */ >> - if ((rc = fdatasync(fd)) == -1) { >> + if ((rc = fdatasync(*fd)) == -1) { >> if ((errno == EROFS) || (errno == EINVAL)) { >> TRACE("Synchronization is not supported for this file"); >> } else { >> @@ -485,9 +484,16 @@ int fileclose_hdl(void *indata, void *ou >> } >> /* Close the file */ >> - rc = close(fd); >> + rc = close(*fd); >> if (rc == -1) { >> LOG_ER("fileclose() %s",strerror(errno)); >> + } else { >> +// When file system is busy, operations on files will take time. >> +// In that case, file handle thread will get timeout and the >> `requester` >> +// will put the `fd` into one link list to do retry next time. >> +// But if closing file succesfully, let the `requester` knows and >> +// no need to send `close file request` again. >> +*fd = -1; >> } >> osaf_mutex_lock_ordie(_ftcom_mutex); /* LOCK after critical >> section */ >> diff --git a/osaf/services/saf/logsv/lgs/lgs_stream.cc >> b/osaf/services/saf/logsv/lgs/lgs_stream.cc >> --- a/osaf/services/saf/logsv/lgs/lgs_stream.cc >> +++ b/osaf/services/saf/logsv/lgs/lgs_stream.cc >> @@ -1122,6 +1122,12 @@ int log_stream_write_h(log_stream_t *str >> if (*stream->p_fd == -1) { >> TRACE("%s - Initiating stream files \"%s\" Failed", >> __FUNCTION__, >> stream->name.c_str()); >> + // Seems file system is busy - can not create requrested files. >> + // Let inform the log client TRY_AGAIN. >> + // >> + // Return (-1) to inform that it is caller's responsibility >> + // to free the allocated memmories. >> + return -1; >> } else { >> TRACE("%s - stream files initiated", __FUNCTION__); >> } > -- Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel
Re: [devel] [PATCH 1 of 1] log: write_log_record_hdl get bad file descriptor [#2028]
ACK -AVM On 9/13/2016 4:19 PM, Vu Minh Nguyen wrote: > osaf/services/saf/logsv/lgs/lgs_filehdl.cc | 16 +++- > osaf/services/saf/logsv/lgs/lgs_stream.cc | 6 ++ > 2 files changed, 17 insertions(+), 5 deletions(-) > > > logsv did pass the WRITE request to file handle thread even > the file descriptor was invalid. Also, when closing file, > the file handle thread did not set it to invalid. > > This patch fixes these things. > > diff --git a/osaf/services/saf/logsv/lgs/lgs_filehdl.cc > b/osaf/services/saf/logsv/lgs/lgs_filehdl.cc > --- a/osaf/services/saf/logsv/lgs/lgs_filehdl.cc > +++ b/osaf/services/saf/logsv/lgs/lgs_filehdl.cc > @@ -467,16 +467,15 @@ open_retry: >*/ > int fileclose_hdl(void *indata, void *outdata, size_t max_outsize) { > int rc = 0; > - int fd; > + int *fd = static_cast(indata); > > - fd = *static_cast(indata); > - TRACE_ENTER2("fd=%d", fd); > + TRACE_ENTER2("fd=%d", *fd); > > osaf_mutex_unlock_ordie(_ftcom_mutex); /* UNLOCK critical section */ > /* Flush and synchronize the file before closing to guaranty that the file > * is not written to after it's closed > */ > - if ((rc = fdatasync(fd)) == -1) { > + if ((rc = fdatasync(*fd)) == -1) { > if ((errno == EROFS) || (errno == EINVAL)) { > TRACE("Synchronization is not supported for this file"); > } else { > @@ -485,9 +484,16 @@ int fileclose_hdl(void *indata, void *ou > } > > /* Close the file */ > - rc = close(fd); > + rc = close(*fd); > if (rc == -1) { > LOG_ER("fileclose() %s",strerror(errno)); > + } else { > +// When file system is busy, operations on files will take time. > +// In that case, file handle thread will get timeout and the `requester` > +// will put the `fd` into one link list to do retry next time. > +// But if closing file succesfully, let the `requester` knows and > +// no need to send `close file request` again. > +*fd = -1; > } > > osaf_mutex_lock_ordie(_ftcom_mutex); /* LOCK after critical section */ > diff --git a/osaf/services/saf/logsv/lgs/lgs_stream.cc > b/osaf/services/saf/logsv/lgs/lgs_stream.cc > --- a/osaf/services/saf/logsv/lgs/lgs_stream.cc > +++ b/osaf/services/saf/logsv/lgs/lgs_stream.cc > @@ -1122,6 +1122,12 @@ int log_stream_write_h(log_stream_t *str > if (*stream->p_fd == -1) { > TRACE("%s - Initiating stream files \"%s\" Failed", __FUNCTION__, > stream->name.c_str()); > + // Seems file system is busy - can not create requrested files. > + // Let inform the log client TRY_AGAIN. > + // > + // Return (-1) to inform that it is caller's responsibility > + // to free the allocated memmories. > + return -1; > } else { > TRACE("%s - stream files initiated", __FUNCTION__); > } -- Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel
Re: [devel] [PATCH 1 of 1] log: write_log_record_hdl get bad file descriptor [#2028]
Yes. That wrong review request is for #1986. It was pushed. Quoting Lennart Lund: > Ack > > Note: There seems to be another review request tagged with the same > ticket number? > > Thanks > Lennart > >> -Original Message- >> From: Vu Minh Nguyen [mailto:vu.m.ngu...@dektech.com.au] >> Sent: den 13 september 2016 12:50 >> To: Lennart Lund ; mahesh.va...@oracle.com >> Cc: opensaf-devel@lists.sourceforge.net >> Subject: [PATCH 1 of 1] log: write_log_record_hdl get bad file descriptor >> [#2028] >> >> osaf/services/saf/logsv/lgs/lgs_filehdl.cc | 16 +++- >> osaf/services/saf/logsv/lgs/lgs_stream.cc | 6 ++ >> 2 files changed, 17 insertions(+), 5 deletions(-) >> >> >> logsv did pass the WRITE request to file handle thread even >> the file descriptor was invalid. Also, when closing file, >> the file handle thread did not set it to invalid. >> >> This patch fixes these things. >> >> diff --git a/osaf/services/saf/logsv/lgs/lgs_filehdl.cc >> b/osaf/services/saf/logsv/lgs/lgs_filehdl.cc >> --- a/osaf/services/saf/logsv/lgs/lgs_filehdl.cc >> +++ b/osaf/services/saf/logsv/lgs/lgs_filehdl.cc >> @@ -467,16 +467,15 @@ open_retry: >> */ >> int fileclose_hdl(void *indata, void *outdata, size_t max_outsize) { >>int rc = 0; >> - int fd; >> + int *fd = static_cast(indata); >> >> - fd = *static_cast(indata); >> - TRACE_ENTER2("fd=%d", fd); >> + TRACE_ENTER2("fd=%d", *fd); >> >>osaf_mutex_unlock_ordie(_ftcom_mutex); /* UNLOCK critical section >> */ >>/* Flush and synchronize the file before closing to guaranty >> that the file >> * is not written to after it's closed >> */ >> - if ((rc = fdatasync(fd)) == -1) { >> + if ((rc = fdatasync(*fd)) == -1) { >> if ((errno == EROFS) || (errno == EINVAL)) { >>TRACE("Synchronization is not supported for this file"); >> } else { >> @@ -485,9 +484,16 @@ int fileclose_hdl(void *indata, void *ou >>} >> >>/* Close the file */ >> - rc = close(fd); >> + rc = close(*fd); >>if (rc == -1) { >> LOG_ER("fileclose() %s",strerror(errno)); >> + } else { >> +// When file system is busy, operations on files will take time. >> +// In that case, file handle thread will get timeout and the >> `requester` >> +// will put the `fd` into one link list to do retry next time. >> +// But if closing file succesfully, let the `requester` knows and >> +// no need to send `close file request` again. >> +*fd = -1; >>} >> >>osaf_mutex_lock_ordie(_ftcom_mutex); /* LOCK after critical section >> */ >> diff --git a/osaf/services/saf/logsv/lgs/lgs_stream.cc >> b/osaf/services/saf/logsv/lgs/lgs_stream.cc >> --- a/osaf/services/saf/logsv/lgs/lgs_stream.cc >> +++ b/osaf/services/saf/logsv/lgs/lgs_stream.cc >> @@ -1122,6 +1122,12 @@ int log_stream_write_h(log_stream_t *str >> if (*stream->p_fd == -1) { >>TRACE("%s - Initiating stream files \"%s\" Failed", __FUNCTION__, >> stream->name.c_str()); >> + // Seems file system is busy - can not create requrested files. >> + // Let inform the log client TRY_AGAIN. >> + // >> + // Return (-1) to inform that it is caller's responsibility >> + // to free the allocated memmories. >> + return -1; >> } else { >>TRACE("%s - stream files initiated", __FUNCTION__); >> } -- Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel
Re: [devel] [PATCH 1 of 1] log: write_log_record_hdl get bad file descriptor [#2028]
Ack Note: There seems to be another review request tagged with the same ticket number? Thanks Lennart > -Original Message- > From: Vu Minh Nguyen [mailto:vu.m.ngu...@dektech.com.au] > Sent: den 13 september 2016 12:50 > To: Lennart Lund; mahesh.va...@oracle.com > Cc: opensaf-devel@lists.sourceforge.net > Subject: [PATCH 1 of 1] log: write_log_record_hdl get bad file descriptor > [#2028] > > osaf/services/saf/logsv/lgs/lgs_filehdl.cc | 16 +++- > osaf/services/saf/logsv/lgs/lgs_stream.cc | 6 ++ > 2 files changed, 17 insertions(+), 5 deletions(-) > > > logsv did pass the WRITE request to file handle thread even > the file descriptor was invalid. Also, when closing file, > the file handle thread did not set it to invalid. > > This patch fixes these things. > > diff --git a/osaf/services/saf/logsv/lgs/lgs_filehdl.cc > b/osaf/services/saf/logsv/lgs/lgs_filehdl.cc > --- a/osaf/services/saf/logsv/lgs/lgs_filehdl.cc > +++ b/osaf/services/saf/logsv/lgs/lgs_filehdl.cc > @@ -467,16 +467,15 @@ open_retry: > */ > int fileclose_hdl(void *indata, void *outdata, size_t max_outsize) { >int rc = 0; > - int fd; > + int *fd = static_cast(indata); > > - fd = *static_cast(indata); > - TRACE_ENTER2("fd=%d", fd); > + TRACE_ENTER2("fd=%d", *fd); > >osaf_mutex_unlock_ordie(_ftcom_mutex); /* UNLOCK critical section > */ >/* Flush and synchronize the file before closing to guaranty that the file > * is not written to after it's closed > */ > - if ((rc = fdatasync(fd)) == -1) { > + if ((rc = fdatasync(*fd)) == -1) { > if ((errno == EROFS) || (errno == EINVAL)) { >TRACE("Synchronization is not supported for this file"); > } else { > @@ -485,9 +484,16 @@ int fileclose_hdl(void *indata, void *ou >} > >/* Close the file */ > - rc = close(fd); > + rc = close(*fd); >if (rc == -1) { > LOG_ER("fileclose() %s",strerror(errno)); > + } else { > +// When file system is busy, operations on files will take time. > +// In that case, file handle thread will get timeout and the `requester` > +// will put the `fd` into one link list to do retry next time. > +// But if closing file succesfully, let the `requester` knows and > +// no need to send `close file request` again. > +*fd = -1; >} > >osaf_mutex_lock_ordie(_ftcom_mutex); /* LOCK after critical section > */ > diff --git a/osaf/services/saf/logsv/lgs/lgs_stream.cc > b/osaf/services/saf/logsv/lgs/lgs_stream.cc > --- a/osaf/services/saf/logsv/lgs/lgs_stream.cc > +++ b/osaf/services/saf/logsv/lgs/lgs_stream.cc > @@ -1122,6 +1122,12 @@ int log_stream_write_h(log_stream_t *str > if (*stream->p_fd == -1) { >TRACE("%s - Initiating stream files \"%s\" Failed", __FUNCTION__, > stream->name.c_str()); > + // Seems file system is busy - can not create requrested files. > + // Let inform the log client TRY_AGAIN. > + // > + // Return (-1) to inform that it is caller's responsibility > + // to free the allocated memmories. > + return -1; > } else { >TRACE("%s - stream files initiated", __FUNCTION__); > } -- Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel