DataFlash: removed create() method for objects

See discussion here:

  https://github.com/ArduPilot/ardupilot/issues/7331

we were getting some uninitialised variables. While it only showed up in
AP_SbusOut, it means we can't be sure it won't happen on other objects,
so safest to remove the approach

Thanks to assistance from Lucas, Peter and Francisco
This commit is contained in:
Andrew Tridgell 2017-12-13 12:06:15 +11:00
parent 15026c6898
commit fd14dedcff
3 changed files with 7 additions and 13 deletions

View File

@ -53,21 +53,17 @@ public:
FUNCTOR_TYPEDEF(print_mode_fn, void, AP_HAL::BetterStream*, uint8_t);
FUNCTOR_TYPEDEF(vehicle_startup_message_Log_Writer, void);
static DataFlash_Class create(const char *firmware_string, const AP_Int32 &log_bitmask) {
return DataFlash_Class{firmware_string, log_bitmask};
}
DataFlash_Class(const char *firmware_string, const AP_Int32 &log_bitmask);
/* Do not allow copies */
DataFlash_Class(const DataFlash_Class &other) = delete;
DataFlash_Class &operator=(const DataFlash_Class&) = delete;
// get singleton instance
static DataFlash_Class *instance(void) {
return _instance;
}
constexpr DataFlash_Class(DataFlash_Class &&other) = default;
/* Do not allow copies */
DataFlash_Class(const DataFlash_Class &other) = delete;
DataFlash_Class &operator=(const DataFlash_Class&) = delete;
void set_mission(const AP_Mission *mission);
// initialisation
@ -248,8 +244,6 @@ protected:
bool is_critical);
private:
DataFlash_Class(const char *firmware_string, const AP_Int32 &log_bitmask);
#define DATAFLASH_MAX_BACKENDS 2
uint8_t _next_backend;
DataFlash_Backend *backends[DATAFLASH_MAX_BACKENDS];

View File

@ -91,7 +91,7 @@ public:
private:
AP_Int32 log_bitmask;
DataFlash_Class dataflash = DataFlash_Class::create("DF AllTypes 0.2", log_bitmask);
DataFlash_Class dataflash{"DF AllTypes 0.2", log_bitmask};
void print_mode(AP_HAL::BetterStream *port, uint8_t mode);
void Log_Write_TypeMessages();

View File

@ -41,7 +41,7 @@ public:
private:
AP_Int32 log_bitmask;
DataFlash_Class dataflash = DataFlash_Class::create("DF Test 0.1", log_bitmask);
DataFlash_Class dataflash{"DF Test 0.1", log_bitmask};
void print_mode(AP_HAL::BetterStream *port, uint8_t mode);
};