Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
---
src/libvirt_private.syms | 1 +
src/util/virerror.c | 12 +++++++++---
src/util/virerror.h | 1 +
3 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index b31f599..6bbbf77 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1702,6 +1702,7 @@ ebtablesRemoveForwardAllowIn;
# util/virerror.h
+virCopyError;
virDispatchError;
virErrorCopyNew;
virErrorInitialize;
diff --git a/src/util/virerror.c b/src/util/virerror.c
index c000b00..2ff8a3e 100644
--- a/src/util/virerror.c
+++ b/src/util/virerror.c
@@ -188,10 +188,16 @@ virErrorGenericFailure(virErrorPtr err)
}
-/*
- * Internal helper to perform a deep copy of an error
+/**
+ * virCopyError:
+ * @from: error to copy from
+ * @to: error to copy to
+ *
+ * Copy error fields from @from to @to.
+ *
+ * Returns 0 on success, -1 on failure.
*/
-static int
+int
virCopyError(virErrorPtr from,
virErrorPtr to)
{
diff --git a/src/util/virerror.h b/src/util/virerror.h
index 760bfa4..90ac619 100644
--- a/src/util/virerror.h
+++ b/src/util/virerror.h
@@ -192,6 +192,7 @@ void virReportOOMErrorFull(int domcode,
int virSetError(virErrorPtr newerr);
virErrorPtr virErrorCopyNew(virErrorPtr err);
+int virCopyError(virErrorPtr from, virErrorPtr to);
void virDispatchError(virConnectPtr conn);
const char *virStrerror(int theerrno, char *errBuf, size_t errBufLen);
--
1.8.3.1
--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
On 04/18/2018 10:44 AM, Nikolay Shirokovskiy wrote: > Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com> > --- > src/libvirt_private.syms | 1 + > src/util/virerror.c | 12 +++++++++--- > src/util/virerror.h | 1 + > 3 files changed, 11 insertions(+), 3 deletions(-) > NACK, you should be using virErrorCopyNew John > diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms > index b31f599..6bbbf77 100644 > --- a/src/libvirt_private.syms > +++ b/src/libvirt_private.syms > @@ -1702,6 +1702,7 @@ ebtablesRemoveForwardAllowIn; > > > # util/virerror.h > +virCopyError; > virDispatchError; > virErrorCopyNew; > virErrorInitialize; > diff --git a/src/util/virerror.c b/src/util/virerror.c > index c000b00..2ff8a3e 100644 > --- a/src/util/virerror.c > +++ b/src/util/virerror.c > @@ -188,10 +188,16 @@ virErrorGenericFailure(virErrorPtr err) > } > > > -/* > - * Internal helper to perform a deep copy of an error > +/** > + * virCopyError: > + * @from: error to copy from > + * @to: error to copy to > + * > + * Copy error fields from @from to @to. > + * > + * Returns 0 on success, -1 on failure. > */ > -static int > +int > virCopyError(virErrorPtr from, > virErrorPtr to) > { > diff --git a/src/util/virerror.h b/src/util/virerror.h > index 760bfa4..90ac619 100644 > --- a/src/util/virerror.h > +++ b/src/util/virerror.h > @@ -192,6 +192,7 @@ void virReportOOMErrorFull(int domcode, > > int virSetError(virErrorPtr newerr); > virErrorPtr virErrorCopyNew(virErrorPtr err); > +int virCopyError(virErrorPtr from, virErrorPtr to); > void virDispatchError(virConnectPtr conn); > const char *virStrerror(int theerrno, char *errBuf, size_t errBufLen); > > -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
On 01.05.2018 01:03, John Ferlan wrote: > > > On 04/18/2018 10:44 AM, Nikolay Shirokovskiy wrote: >> Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com> >> --- >> src/libvirt_private.syms | 1 + >> src/util/virerror.c | 12 +++++++++--- >> src/util/virerror.h | 1 + >> 3 files changed, 11 insertions(+), 3 deletions(-) >> > > NACK, you should be using virErrorCopyNew > > John I introduced monError in qemuDomainObjPrivatePtr in next patch and it is not a pointer so I need this function. I did not make monError pointer for the same reason it is not pointer in monitor object - I use monError both as flag and as error message. > >> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms >> index b31f599..6bbbf77 100644 >> --- a/src/libvirt_private.syms >> +++ b/src/libvirt_private.syms >> @@ -1702,6 +1702,7 @@ ebtablesRemoveForwardAllowIn; >> >> >> # util/virerror.h >> +virCopyError; >> virDispatchError; >> virErrorCopyNew; >> virErrorInitialize; >> diff --git a/src/util/virerror.c b/src/util/virerror.c >> index c000b00..2ff8a3e 100644 >> --- a/src/util/virerror.c >> +++ b/src/util/virerror.c >> @@ -188,10 +188,16 @@ virErrorGenericFailure(virErrorPtr err) >> } >> >> >> -/* >> - * Internal helper to perform a deep copy of an error >> +/** >> + * virCopyError: >> + * @from: error to copy from >> + * @to: error to copy to >> + * >> + * Copy error fields from @from to @to. >> + * >> + * Returns 0 on success, -1 on failure. >> */ >> -static int >> +int >> virCopyError(virErrorPtr from, >> virErrorPtr to) >> { >> diff --git a/src/util/virerror.h b/src/util/virerror.h >> index 760bfa4..90ac619 100644 >> --- a/src/util/virerror.h >> +++ b/src/util/virerror.h >> @@ -192,6 +192,7 @@ void virReportOOMErrorFull(int domcode, >> >> int virSetError(virErrorPtr newerr); >> virErrorPtr virErrorCopyNew(virErrorPtr err); >> +int virCopyError(virErrorPtr from, virErrorPtr to); >> void virDispatchError(virConnectPtr conn); >> const char *virStrerror(int theerrno, char *errBuf, size_t errBufLen); >> >> -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
On 05/03/2018 03:39 AM, Nikolay Shirokovskiy wrote: > > > On 01.05.2018 01:03, John Ferlan wrote: >> >> >> On 04/18/2018 10:44 AM, Nikolay Shirokovskiy wrote: >>> Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com> >>> --- >>> src/libvirt_private.syms | 1 + >>> src/util/virerror.c | 12 +++++++++--- >>> src/util/virerror.h | 1 + >>> 3 files changed, 11 insertions(+), 3 deletions(-) >>> >> >> NACK, you should be using virErrorCopyNew >> >> John > > I introduced monError in qemuDomainObjPrivatePtr in next patch and it is not a pointer so > I need this function. I did not make monError pointer for the same reason it is not pointer > in monitor object - I use monError both as flag and as error message. > I saw what you did - the fact is virCopyError is coded as private to the module. Just making it global because you have a use for it is I believe incorrect. Ironically in the next patch you have: + virErrorPtr err = qemuMonitorLastError(mon); + + virCopyError(err, &priv->monError); The first call isn't guaranteed to set @err and all you're essentially doing is wanting to copy from mon->lastError to priv->monError or perhaps similar to virCopyLastError. Maybe some new API in virerror.c should handle that. John >> >>> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms >>> index b31f599..6bbbf77 100644 >>> --- a/src/libvirt_private.syms >>> +++ b/src/libvirt_private.syms >>> @@ -1702,6 +1702,7 @@ ebtablesRemoveForwardAllowIn; >>> >>> >>> # util/virerror.h >>> +virCopyError; >>> virDispatchError; >>> virErrorCopyNew; >>> virErrorInitialize; >>> diff --git a/src/util/virerror.c b/src/util/virerror.c >>> index c000b00..2ff8a3e 100644 >>> --- a/src/util/virerror.c >>> +++ b/src/util/virerror.c >>> @@ -188,10 +188,16 @@ virErrorGenericFailure(virErrorPtr err) >>> } >>> >>> >>> -/* >>> - * Internal helper to perform a deep copy of an error >>> +/** >>> + * virCopyError: >>> + * @from: error to copy from >>> + * @to: error to copy to >>> + * >>> + * Copy error fields from @from to @to. >>> + * >>> + * Returns 0 on success, -1 on failure. >>> */ >>> -static int >>> +int >>> virCopyError(virErrorPtr from, >>> virErrorPtr to) >>> { >>> diff --git a/src/util/virerror.h b/src/util/virerror.h >>> index 760bfa4..90ac619 100644 >>> --- a/src/util/virerror.h >>> +++ b/src/util/virerror.h >>> @@ -192,6 +192,7 @@ void virReportOOMErrorFull(int domcode, >>> >>> int virSetError(virErrorPtr newerr); >>> virErrorPtr virErrorCopyNew(virErrorPtr err); >>> +int virCopyError(virErrorPtr from, virErrorPtr to); >>> void virDispatchError(virConnectPtr conn); >>> const char *virStrerror(int theerrno, char *errBuf, size_t errBufLen); >>> >>> -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
On 04.05.2018 16:58, John Ferlan wrote: > > > On 05/03/2018 03:39 AM, Nikolay Shirokovskiy wrote: >> >> >> On 01.05.2018 01:03, John Ferlan wrote: >>> >>> >>> On 04/18/2018 10:44 AM, Nikolay Shirokovskiy wrote: >>>> Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com> >>>> --- >>>> src/libvirt_private.syms | 1 + >>>> src/util/virerror.c | 12 +++++++++--- >>>> src/util/virerror.h | 1 + >>>> 3 files changed, 11 insertions(+), 3 deletions(-) >>>> >>> >>> NACK, you should be using virErrorCopyNew >>> >>> John >> >> I introduced monError in qemuDomainObjPrivatePtr in next patch and it is not a pointer so >> I need this function. I did not make monError pointer for the same reason it is not pointer >> in monitor object - I use monError both as flag and as error message. >> > > I saw what you did - the fact is virCopyError is coded as private to the > module. Just making it global because you have a use for it is I believe > incorrect. But why? > > Ironically in the next patch you have: > > + virErrorPtr err = qemuMonitorLastError(mon); > + > + virCopyError(err, &priv->monError); > > > The first call isn't guaranteed to set @err and all you're essentially > doing is wanting to copy from mon->lastError to priv->monError or > perhaps similar to virCopyLastError. It is ok that error can turn from non-NULL to NULL on copy due to OOM conditions or whaever. It is just as in previous patch. We use priv->monError for 2 purpuses. And thus qemuProcessNotifyMonitorError sets priv->monError.code explicitly if it still set to VIR_ERR_OK after copy. > > Maybe some new API in virerror.c should handle that. > Not sure we need it at this point. But may be I miss something, please share your vision in more detail then. Nikolay > >>> >>>> diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms >>>> index b31f599..6bbbf77 100644 >>>> --- a/src/libvirt_private.syms >>>> +++ b/src/libvirt_private.syms >>>> @@ -1702,6 +1702,7 @@ ebtablesRemoveForwardAllowIn; >>>> >>>> >>>> # util/virerror.h >>>> +virCopyError; >>>> virDispatchError; >>>> virErrorCopyNew; >>>> virErrorInitialize; >>>> diff --git a/src/util/virerror.c b/src/util/virerror.c >>>> index c000b00..2ff8a3e 100644 >>>> --- a/src/util/virerror.c >>>> +++ b/src/util/virerror.c >>>> @@ -188,10 +188,16 @@ virErrorGenericFailure(virErrorPtr err) >>>> } >>>> >>>> >>>> -/* >>>> - * Internal helper to perform a deep copy of an error >>>> +/** >>>> + * virCopyError: >>>> + * @from: error to copy from >>>> + * @to: error to copy to >>>> + * >>>> + * Copy error fields from @from to @to. >>>> + * >>>> + * Returns 0 on success, -1 on failure. >>>> */ >>>> -static int >>>> +int >>>> virCopyError(virErrorPtr from, >>>> virErrorPtr to) >>>> { >>>> diff --git a/src/util/virerror.h b/src/util/virerror.h >>>> index 760bfa4..90ac619 100644 >>>> --- a/src/util/virerror.h >>>> +++ b/src/util/virerror.h >>>> @@ -192,6 +192,7 @@ void virReportOOMErrorFull(int domcode, >>>> >>>> int virSetError(virErrorPtr newerr); >>>> virErrorPtr virErrorCopyNew(virErrorPtr err); >>>> +int virCopyError(virErrorPtr from, virErrorPtr to); >>>> void virDispatchError(virConnectPtr conn); >>>> const char *virStrerror(int theerrno, char *errBuf, size_t errBufLen); >>>> >>>> -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
On 05/07/2018 04:33 AM, Nikolay Shirokovskiy wrote: > > > On 04.05.2018 16:58, John Ferlan wrote: >> >> >> On 05/03/2018 03:39 AM, Nikolay Shirokovskiy wrote: >>> >>> >>> On 01.05.2018 01:03, John Ferlan wrote: >>>> >>>> >>>> On 04/18/2018 10:44 AM, Nikolay Shirokovskiy wrote: >>>>> Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com> >>>>> --- >>>>> src/libvirt_private.syms | 1 + >>>>> src/util/virerror.c | 12 +++++++++--- >>>>> src/util/virerror.h | 1 + >>>>> 3 files changed, 11 insertions(+), 3 deletions(-) >>>>> >>>> >>>> NACK, you should be using virErrorCopyNew >>>> >>>> John >>> >>> I introduced monError in qemuDomainObjPrivatePtr in next patch and it is not a pointer so >>> I need this function. I did not make monError pointer for the same reason it is not pointer >>> in monitor object - I use monError both as flag and as error message. >>> >> >> I saw what you did - the fact is virCopyError is coded as private to the >> module. Just making it global because you have a use for it is I believe >> incorrect. > > But why? > Because virErrorCopyNew is designated to "externally" use virCopyError. >> >> Ironically in the next patch you have: >> >> + virErrorPtr err = qemuMonitorLastError(mon); >> + >> + virCopyError(err, &priv->monError); >> >> >> The first call isn't guaranteed to set @err and all you're essentially >> doing is wanting to copy from mon->lastError to priv->monError or >> perhaps similar to virCopyLastError. > > It is ok that error can turn from non-NULL to NULL on copy due to OOM > conditions or whaever. It is just as in previous patch. We use priv->monError > for 2 purpuses. And thus qemuProcessNotifyMonitorError sets priv->monError.code > explicitly if it still set to VIR_ERR_OK after copy. > It's "possible" from the above code that @priv->monError would have nothing filled in based on virCopyError logic, so how is that better than what's being done now? That's why I figured that changing the innards of virCopyLastError would be more beneficial in the long run. >> >> Maybe some new API in virerror.c should handle that. >> > > Not sure we need it at this point. But may be I miss something, please > share your vision in more detail then. > It's not my patch - I'll review whatever comes next. I've provided suggestions and comments. John -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
© 2016 - 2025 Red Hat, Inc.