Keith Wall commented on PROTON-261:

I like the idea to extend the pn_disposition_t enum to include a constant to 
explicitly indicate the pending state.Like you say, if the constant had a zero 
value, then the application would be free to use a "if 
(pn_delivery_remote_state(...))" idiom.   The pn_delivery_update would need to 
be changed to disallow the use of the new pending state.

> pn_delivery_local_state and pn_delivery_remote_state can return a zero value 
> (outside that defined by the pn_disposition_t enum)
> --------------------------------------------------------------------------------------------------------------------------------
>                 Key: PROTON-261
>                 URL: https://issues.apache.org/jira/browse/PROTON-261
>             Project: Qpid Proton
>          Issue Type: Bug
>          Components: proton-c
>    Affects Versions: 0.5
>            Reporter: Keith Wall
> In proton-c, pn_delivery_local_state and pn_delivery_remote_state are defined 
> as returning an pn_disposition_t:
> PN_EXTERN pn_disposition_t pn_delivery_local_state(pn_delivery_t *delivery);
> PN_EXTERN pn_disposition_t pn_delivery_remote_state(pn_delivery_t *delivery);
> with pn_disposition_t defined as:
> typedef enum pn_disposition_t {
> } pn_disposition_t;
> However, there are circumstances when the proton-c implementation returns a 
> value outside this enumeration - value 0 - coming for the struct 
> initialisation in pn_delivery().  What does this value mean and how is an 
> application supposed to react to this value?   Are there an implicit 
> restrictions regarding when an application may call 
> pn_delivery_local_state/pn_delivery_remote_state?
> btw.  This question arises from work on PROTON-257.  Proton-jni (Swig 
> generated code - so called "Proper enums" - see 
> http://www.swig.org/Doc2.0/Java.html#Java_proper_enums_classes) is failing to 
> decode the enum when testing the state of a newly created Delivery.
> test(org.apache.qpid.proton.systemtests.ProtonEngineExampleTest)  Time 
> elapsed: 0.109 sec  <<< ERROR!
> java.lang.IllegalArgumentException: No enum class 
> org.apache.qpid.proton.jni.pn_disposition_t with value 0
>         at 
> org.apache.qpid.proton.jni.pn_disposition_t.swigToEnum(pn_disposition_t.java:32)
>         at 
> org.apache.qpid.proton.jni.Proton.pn_delivery_local_state(Proton.java:624)
>         at 
> org.apache.qpid.proton.engine.jni.JNIDelivery.getLocalState(JNIDelivery.java:100)
>         at 
> org.apache.qpid.proton.systemtests.ProtonEngineExampleTest.test(ProtonEngineExampleTest.java:190)

This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to