[
https://issues.apache.org/jira/browse/GEODE-6500?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ernest Burghardt closed GEODE-6500.
-----------------------------------
> apache::geode::client::InterestResultPolicy only works because we get lucky
> ---------------------------------------------------------------------------
>
> Key: GEODE-6500
> URL: https://issues.apache.org/jira/browse/GEODE-6500
> Project: Geode
> Issue Type: Bug
> Components: native client
> Reporter: Blake Bender
> Priority: Major
>
> Here's the code in InterestResultPolicy.hpp:
> {code:java}
> namespace apache {
> namespace geode {
> namespace client {
> /**
> * @class InterestResultPolicy InterestResultPolicy.hpp
> * Policy class for interest result.
> */
> class APACHE_GEODE_EXPORT InterestResultPolicy {
> // public static methods
> public:
> static char nextOrdinal;
> static InterestResultPolicy NONE;
> static InterestResultPolicy KEYS;
> static InterestResultPolicy KEYS_VALUES;
> char ordinal;
> char getOrdinal() { return ordinal; }
> private:
> InterestResultPolicy() { ordinal = nextOrdinal++; }
> };{code}
> All the statics are initialized in InterestResultPolicy.cpp, with nextOrdinal
> set to 0. Thus, most of the time, the InterestResultPolicy instances NONE,
> KEYS, and KEYS_VALUES are assigned 1, 2, and 3, respectively. The Geode wire
> protocol most likely depends on these being fixed values, but the code as
> written relies on initialization order to get the correct values.
> Initialization order is *undefined behavior*, and compiler dependent. These
> need to be explicitly initialized, NONE KEYS and KEYS_VALUES should be
> members of an enum class rather than object instances, etc.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)