OSDN Git Service

Base classes should have virtual destructors
authorPavlin Radoslavov <pavlin@google.com>
Sun, 19 Mar 2017 02:24:05 +0000 (19:24 -0700)
committerPavlin Radoslavov <pavlin@google.com>
Sun, 19 Mar 2017 02:24:05 +0000 (19:24 -0700)
Each base class in service/common/bluetooth now has a virtual
destructor. This fixes memory delete issues that were exposed
when running the unit tests with ASAN enabled.

Test: Running unit tests with ASAN enabled
Change-Id: Ie944eb80784de4ebac3c7276fabed6acb5fec6c0

service/common/bluetooth/advertise_data.h
service/common/bluetooth/advertise_settings.h
service/common/bluetooth/characteristic.h
service/common/bluetooth/descriptor.h
service/common/bluetooth/scan_filter.h
service/common/bluetooth/scan_result.h
service/common/bluetooth/scan_settings.h
service/common/bluetooth/service.h
service/common/bluetooth/uuid.h

index f5f5b5c..0eb2bc1 100644 (file)
@@ -41,7 +41,7 @@ class AdvertiseData {
   // Default constructor initializes all fields to be empty/false.
   AdvertiseData();
   AdvertiseData(const AdvertiseData& other);
-  ~AdvertiseData() = default;
+  virtual ~AdvertiseData() = default;
 
   // Returns true if the advertising data is formatted correctly according to
   // the TLV format.
index bd3764d..6a533dd 100644 (file)
@@ -69,7 +69,7 @@ class AdvertiseSettings {
   //   TX power level: TX_POWER_LEVEL_MEDIUM
   //   connectable: true
   AdvertiseSettings();
-  ~AdvertiseSettings() = default;
+  virtual ~AdvertiseSettings() = default;
 
   // Returns the advertise mode.
   Mode mode() const { return mode_; }
index a68270a..ba7328a 100644 (file)
@@ -35,7 +35,7 @@ class Characteristic {
         permissions_(permissions),
         descriptors_(descriptors){};
   Characteristic& operator=(const Characteristic& other);
-  ~Characteristic() = default;
+  virtual ~Characteristic() = default;
 
   // Comparison function and operator.
   bool Equals(const Characteristic& other) const;
index 90c021d..35fe53e 100644 (file)
@@ -26,7 +26,7 @@ class Descriptor {
   Descriptor& operator=(const Descriptor& other);
   Descriptor(uint16_t handle, const UUID& uuid, uint16_t permissions)
       : handle_(handle), uuid_(uuid), permissions_(permissions){};
-  ~Descriptor() = default;
+  virtual ~Descriptor() = default;
 
   // Comparison function and operator.
   bool Equals(const Descriptor& other) const;
index 74cfcb8..d4c87dd 100644 (file)
@@ -27,7 +27,7 @@ namespace bluetooth {
 class ScanFilter {
  public:
   ScanFilter() = default;
-  ~ScanFilter() = default;
+  virtual ~ScanFilter() = default;
 
   // Copy constructor and assignment operator.
   ScanFilter(const ScanFilter& other);
index 67240c2..150ad4e 100644 (file)
@@ -30,7 +30,7 @@ class ScanResult {
   ScanResult(const std::string& device_address,
              const std::vector<uint8_t>& scan_record, int rssi);
   ScanResult() = default;
-  ~ScanResult() = default;
+  virtual ~ScanResult() = default;
 
   // Returns the remote BD_ADDR associated with this scan result.
   const std::string& device_address() const { return device_address_; }
index 02d7eb8..da907b5 100644 (file)
@@ -116,7 +116,7 @@ class ScanSettings {
   ScanSettings(Mode mode, CallbackTypeBitField callback_type,
                ResultType result_type, base::TimeDelta report_delay_ms,
                MatchMode match_mode, MatchCount match_count_per_filter);
-  ~ScanSettings() = default;
+  virtual ~ScanSettings() = default;
 
   // Returns the scan mode.
   Mode mode() const { return mode_; }
index 1949546..b3ce0ea 100644 (file)
@@ -35,7 +35,7 @@ class Service {
         characteristics_(characteristics),
         included_services_(included_services){};
   Service& operator=(const Service& other);
-  ~Service() = default;
+  virtual ~Service() = default;
 
   // Comparison function and operator.
   bool Equals(const Service& other) const;
index 57dec0a..034654c 100644 (file)
@@ -46,6 +46,7 @@ class UUID {
 
   // Construct a Bluetooth 'base' UUID.
   UUID();
+  virtual ~UUID() = default;
 
   // BlueDroid constructor.
   explicit UUID(const bt_uuid_t& uuid);