mirror of
https://github.com/apache/nuttx.git
synced 2026-06-05 07:12:54 +08:00
drivers: Destroy mutex and sem in the error path
also correct the order to ensure the memory free is last step Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
This commit is contained in:
committed by
Masayuki Ishikawa
parent
dee38ce3e8
commit
dca5a3483f
@@ -2541,6 +2541,8 @@ FAR struct mcp2515_can_s *
|
|||||||
if (canctrl != DEFAULT_CANCTRL_CONFMODE)
|
if (canctrl != DEFAULT_CANCTRL_CONFMODE)
|
||||||
{
|
{
|
||||||
canerr("ERROR: CANCTRL = 0x%02X ! It should be 0x87\n", canctrl);
|
canerr("ERROR: CANCTRL = 0x%02X ! It should be 0x87\n", canctrl);
|
||||||
|
nxmutex_destroy(&priv->lock);
|
||||||
|
kmm_free(priv);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -394,6 +394,9 @@ int i2c_register(FAR struct i2c_master_s *i2c, int bus)
|
|||||||
* device.
|
* device.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS
|
||||||
|
nxmutex_destroy(&priv->lock);
|
||||||
|
#endif
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -436,6 +436,7 @@ int i2schar_register(FAR struct i2s_dev_s *i2s, int minor)
|
|||||||
* device.
|
* device.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
nxmutex_destroy(&priv->lock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1112,6 +1112,7 @@ int cypress_mbr3108_register(FAR const char *devpath,
|
|||||||
ret = register_driver(devpath, &g_mbr3108_fileops, 0666, priv);
|
ret = register_driver(devpath, &g_mbr3108_fileops, 0666, priv);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
|
nxmutex_destroy(&priv->devlock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
mbr3108_dbg("Error occurred during the driver registering\n");
|
mbr3108_dbg("Error occurred during the driver registering\n");
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -302,6 +302,7 @@ STMPE811_HANDLE stmpe811_instantiate(FAR struct i2c_master_s *dev,
|
|||||||
ret = stmpe811_checkid(priv);
|
ret = stmpe811_checkid(priv);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
|
nxmutex_destroy(&priv->lock);
|
||||||
#ifdef CONFIG_STMPE811_MULTIPLE
|
#ifdef CONFIG_STMPE811_MULTIPLE
|
||||||
g_stmpe811list = priv->flink;
|
g_stmpe811list = priv->flink;
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
|
|||||||
@@ -1580,6 +1580,7 @@ errout_with_interrupts:
|
|||||||
|
|
||||||
errout_with_lock:
|
errout_with_lock:
|
||||||
nxmutex_destroy(&priv->lock);
|
nxmutex_destroy(&priv->lock);
|
||||||
|
kmm_free(priv);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1134,6 +1134,7 @@ int ht16k33_register(int devno, FAR struct i2c_master_s *i2c)
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
snerr("ERROR: Failed to register driver: %d\n", ret);
|
snerr("ERROR: Failed to register driver: %d\n", ret);
|
||||||
|
nxmutex_destroy(&priv->lock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1664,6 +1664,7 @@ int pcf8574_lcd_backpack_register(FAR const char *devpath,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
lcdinfo("Failed to register driver: %d\n", ret);
|
lcdinfo("Failed to register driver: %d\n", ret);
|
||||||
|
nxmutex_destroy(&priv->lock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1060,6 +1060,7 @@ int st7032_register(FAR const char *devpath, FAR struct i2c_master_s *i2c)
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
snerr("ERROR: Failed to register driver: %d\n", ret);
|
snerr("ERROR: Failed to register driver: %d\n", ret);
|
||||||
|
nxmutex_destroy(&priv->lock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -696,6 +696,7 @@ int ws2812_leds_register(FAR const char *devpath, FAR struct spi_dev_s *spi,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
lederr("ERROR: Failed to register driver: %d\n", ret);
|
lederr("ERROR: Failed to register driver: %d\n", ret);
|
||||||
|
nxmutex_destroy(&priv->lock);
|
||||||
kmm_free(priv->tx_buf);
|
kmm_free(priv->tx_buf);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -389,6 +389,7 @@ ADXL345_HANDLE adxl345_instantiate(FAR struct i2c_master_s *dev,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
snerr("ERROR: Wrong Device ID!\n");
|
snerr("ERROR: Wrong Device ID!\n");
|
||||||
|
nxmutex_destroy(&priv->lock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -606,6 +606,7 @@ int aht10_register(FAR const char *devpath, FAR struct i2c_master_s *i2c,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
snerr("ERROR: Failed to initialize AHT10: %d\n", ret);
|
snerr("ERROR: Failed to initialize AHT10: %d\n", ret);
|
||||||
|
nxmutex_destroy(&priv->devlock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -616,6 +617,7 @@ int aht10_register(FAR const char *devpath, FAR struct i2c_master_s *i2c,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
snerr("ERROR: Failed to register driver: %d\n", ret);
|
snerr("ERROR: Failed to register driver: %d\n", ret);
|
||||||
|
nxmutex_destroy(&priv->devlock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -542,6 +542,8 @@ int bmg160_register(FAR const char *devpath, FAR struct spi_dev_s *spi,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
snerr("ERROR: Failed to attach interrupt\n");
|
snerr("ERROR: Failed to attach interrupt\n");
|
||||||
|
nxmutex_destroy(&priv->datalock);
|
||||||
|
kmm_free(priv);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -551,8 +553,8 @@ int bmg160_register(FAR const char *devpath, FAR struct spi_dev_s *spi,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
snerr("ERROR: Failed to register driver: %d\n", ret);
|
snerr("ERROR: Failed to register driver: %d\n", ret);
|
||||||
kmm_free(priv);
|
|
||||||
nxmutex_destroy(&priv->datalock);
|
nxmutex_destroy(&priv->datalock);
|
||||||
|
kmm_free(priv);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -568,6 +568,7 @@ int dhtxx_register(FAR const char *devpath,
|
|||||||
ret = register_driver(devpath, &g_dhtxxfops, 0666, priv);
|
ret = register_driver(devpath, &g_dhtxxfops, 0666, priv);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
|
nxmutex_destroy(&priv->devlock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
snerr("ERROR: Failed to register driver: %d\n", ret);
|
snerr("ERROR: Failed to register driver: %d\n", ret);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -422,6 +422,7 @@ int hcsr04_register(FAR const char *devpath,
|
|||||||
ret = register_driver(devpath, &g_hcsr04ops, 0666, priv);
|
ret = register_driver(devpath, &g_hcsr04ops, 0666, priv);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
|
nxmutex_destroy(&priv->devlock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
hcsr04_dbg("Error occurred during the driver registering = %d\n", ret);
|
hcsr04_dbg("Error occurred during the driver registering = %d\n", ret);
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -969,6 +969,7 @@ int hdc1008_register(FAR const char *devpath, FAR struct i2c_master_s *i2c,
|
|||||||
snerr("ERROR: Failed to register driver: %d\n", ret);
|
snerr("ERROR: Failed to register driver: %d\n", ret);
|
||||||
nxmutex_destroy(&priv->devlock);
|
nxmutex_destroy(&priv->devlock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
sninfo("driver registered\n");
|
sninfo("driver registered\n");
|
||||||
|
|||||||
@@ -1176,9 +1176,10 @@ int hts221_register(FAR const char *devpath, FAR struct i2c_master_s *i2c,
|
|||||||
ret = hts221_load_calibration_data(priv);
|
ret = hts221_load_calibration_data(priv);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
|
nxmutex_destroy(&priv->devlock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
hts221_dbg("Cannot calibrate hts221 sensor\n");
|
hts221_dbg("Cannot calibrate hts221 sensor\n");
|
||||||
return -EAGAIN;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = register_driver(devpath, &g_humidityops, 0666, priv);
|
ret = register_driver(devpath, &g_humidityops, 0666, priv);
|
||||||
@@ -1187,6 +1188,7 @@ int hts221_register(FAR const char *devpath, FAR struct i2c_master_s *i2c,
|
|||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
|
nxmutex_destroy(&priv->devlock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
hts221_dbg("Error occurred during the driver registering\n");
|
hts221_dbg("Error occurred during the driver registering\n");
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -636,6 +636,7 @@ int kxtj9_register(FAR const char *devpath, FAR struct i2c_master_s *i2c,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
snerr("ERROR: Failed to register driver: %d\n", ret);
|
snerr("ERROR: Failed to register driver: %d\n", ret);
|
||||||
|
nxmutex_destroy(&priv->lock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -984,9 +984,9 @@ int lis3dh_register(FAR const char *devpath, FAR struct spi_dev_s *spi,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
snerr("ERROR: Failed to register driver: %d\n", ret);
|
snerr("ERROR: Failed to register driver: %d\n", ret);
|
||||||
kmm_free(priv);
|
|
||||||
nxmutex_destroy(&priv->queuelock);
|
nxmutex_destroy(&priv->queuelock);
|
||||||
nxsem_destroy(&priv->readsem);
|
nxsem_destroy(&priv->readsem);
|
||||||
|
kmm_free(priv);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -552,8 +552,8 @@ int lis3dsh_register(FAR const char *devpath, FAR struct spi_dev_s *spi,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
snerr("ERROR: Failed to register driver: %d\n", ret);
|
snerr("ERROR: Failed to register driver: %d\n", ret);
|
||||||
kmm_free(priv);
|
|
||||||
nxmutex_destroy(&priv->datalock);
|
nxmutex_destroy(&priv->datalock);
|
||||||
|
kmm_free(priv);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -571,6 +571,8 @@ int lis3dsh_register(FAR const char *devpath, FAR struct spi_dev_s *spi,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
snerr("ERROR: Failed to attach interrupt: %d\n", ret);
|
snerr("ERROR: Failed to attach interrupt: %d\n", ret);
|
||||||
|
nxmutex_destroy(&priv->datalock);
|
||||||
|
kmm_free(priv);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -598,7 +598,9 @@ int lis3mdl_register(FAR const char *devpath, FAR struct spi_dev_s *spi,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
snerr("ERROR: Failed to attach interrupt\n");
|
snerr("ERROR: Failed to attach interrupt\n");
|
||||||
return -ENODEV;
|
nxmutex_destroy(&priv->datalock);
|
||||||
|
kmm_free(priv);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Register the character driver */
|
/* Register the character driver */
|
||||||
@@ -607,9 +609,9 @@ int lis3mdl_register(FAR const char *devpath, FAR struct spi_dev_s *spi,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
snerr("ERROR: Failed to register driver: %d\n", ret);
|
snerr("ERROR: Failed to register driver: %d\n", ret);
|
||||||
kmm_free(priv);
|
|
||||||
nxmutex_destroy(&priv->datalock);
|
nxmutex_destroy(&priv->datalock);
|
||||||
return -ENODEV;
|
kmm_free(priv);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Since we support multiple LIS3MDL devices are supported, we will need to
|
/* Since we support multiple LIS3MDL devices are supported, we will need to
|
||||||
|
|||||||
@@ -768,9 +768,11 @@ int lps25h_register(FAR const char *devpath, FAR struct i2c_master_s *i2c,
|
|||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
|
nxmutex_destroy(&dev->devlock);
|
||||||
|
nxsem_destroy(&dev->waitsem);
|
||||||
kmm_free(dev);
|
kmm_free(dev);
|
||||||
lps25h_dbg("Error occurred during the driver registering\n");
|
lps25h_dbg("Error occurred during the driver registering\n");
|
||||||
return ERROR;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
dev->config->irq_attach(config, lps25h_int_handler, dev);
|
dev->config->irq_attach(config, lps25h_int_handler, dev);
|
||||||
|
|||||||
@@ -896,6 +896,7 @@ int max44009_register(FAR const char *devpath, FAR struct i2c_master_s *i2c,
|
|||||||
max44009_dbg("Registered with %d\n", ret);
|
max44009_dbg("Registered with %d\n", ret);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
|
nxmutex_destroy(&priv->dev_lock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
max44009_dbg("Error occurred during the driver registering\n");
|
max44009_dbg("Error occurred during the driver registering\n");
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -576,7 +576,9 @@ int mlx90393_register(FAR const char *devpath, FAR struct spi_dev_s *spi,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
snerr("ERROR: Failed to attach interrupt\n");
|
snerr("ERROR: Failed to attach interrupt\n");
|
||||||
return -ENODEV;
|
nxmutex_destroy(&priv->datalock);
|
||||||
|
kmm_free(priv);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Register the character driver */
|
/* Register the character driver */
|
||||||
@@ -585,9 +587,9 @@ int mlx90393_register(FAR const char *devpath, FAR struct spi_dev_s *spi,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
snerr("ERROR: Failed to register driver: %d\n", ret);
|
snerr("ERROR: Failed to register driver: %d\n", ret);
|
||||||
kmm_free(priv);
|
|
||||||
nxmutex_destroy(&priv->datalock);
|
nxmutex_destroy(&priv->datalock);
|
||||||
return -ENODEV;
|
kmm_free(priv);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Since we support multiple MLX90393 devices are supported, we will need
|
/* Since we support multiple MLX90393 devices are supported, we will need
|
||||||
|
|||||||
@@ -667,6 +667,7 @@ int ms5611_register(FAR struct i2c_master_s *i2c, int devno, uint8_t addr)
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
snerr("Failed to initialize physical device ms5611:%d\n", ret);
|
snerr("Failed to initialize physical device ms5611:%d\n", ret);
|
||||||
|
nxmutex_destroy(&priv->lock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -677,6 +678,7 @@ int ms5611_register(FAR struct i2c_master_s *i2c, int devno, uint8_t addr)
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
snerr("Failed to register driver: %d\n", ret);
|
snerr("Failed to register driver: %d\n", ret);
|
||||||
|
nxmutex_destroy(&priv->lock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -693,6 +695,7 @@ int ms5611_register(FAR struct i2c_master_s *i2c, int devno, uint8_t addr)
|
|||||||
{
|
{
|
||||||
snerr("Failed to create the notification kthread!\n");
|
snerr("Failed to create the notification kthread!\n");
|
||||||
sensor_unregister(&priv->sensor_lower, devno);
|
sensor_unregister(&priv->sensor_lower, devno);
|
||||||
|
nxmutex_destroy(&priv->lock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1068,6 +1068,7 @@ int scd30_register_i2c(FAR const char *devpath, FAR struct i2c_master_s *i2c,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
scd30_dbg("ERROR: Failed to register driver: %d\n", ret);
|
scd30_dbg("ERROR: Failed to register driver: %d\n", ret);
|
||||||
|
nxmutex_destroy(&priv->devlock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1021,6 +1021,7 @@ int scd41_register_i2c(FAR const char *devpath, FAR struct i2c_master_s *i2c)
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
scd41_dbg("ERROR: Failed to register driver: %d\n", ret);
|
scd41_dbg("ERROR: Failed to register driver: %d\n", ret);
|
||||||
|
nxmutex_destroy(&priv->devlock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1069,6 +1069,7 @@ int sgp30_register(FAR const char *devpath, FAR struct i2c_master_s *i2c,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
sgp30_dbg("ERROR: Failed to register driver: %d\n", ret);
|
sgp30_dbg("ERROR: Failed to register driver: %d\n", ret);
|
||||||
|
nxmutex_destroy(&priv->devlock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -670,6 +670,7 @@ int sht21_register(FAR const char *devpath, FAR struct i2c_master_s *i2c,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
snerr("ERROR: Failed to register driver: %d\n", ret);
|
snerr("ERROR: Failed to register driver: %d\n", ret);
|
||||||
|
nxmutex_destroy(&priv->devlock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -687,6 +687,7 @@ int sht3x_register(FAR const char *devpath, FAR struct i2c_master_s *i2c,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
snerr("ERROR: Failed to register driver: %d\n", ret);
|
snerr("ERROR: Failed to register driver: %d\n", ret);
|
||||||
|
nxmutex_destroy(&priv->devlock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1082,6 +1082,7 @@ int sps30_register_i2c(FAR const char *devpath, FAR struct i2c_master_s *i2c,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
sps30_dbg("ERROR: Failed to register driver: %d\n", ret);
|
sps30_dbg("ERROR: Failed to register driver: %d\n", ret);
|
||||||
|
nxmutex_destroy(&priv->devlock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -738,6 +738,7 @@ int t67xx_register(FAR const char *devpath, FAR struct i2c_master_s *i2c,
|
|||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
errout:
|
errout:
|
||||||
|
nxmutex_destroy(&priv->devlock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -379,6 +379,9 @@ int spi_register(FAR struct spi_dev_s *spi, int bus)
|
|||||||
* device.
|
* device.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS
|
||||||
|
nxmutex_destroy(&priv->lock);
|
||||||
|
#endif
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -618,6 +618,7 @@ int spi_slave_register(FAR struct spi_slave_ctrlr_s *ctrlr, int bus)
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
spierr("ERROR: Failed to register driver: %d\n", ret);
|
spierr("ERROR: Failed to register driver: %d\n", ret);
|
||||||
|
nxmutex_destroy(&priv->lock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -806,6 +806,10 @@ int ramlog_register(FAR const char *devpath, FAR char *buffer, size_t buflen)
|
|||||||
ret = register_driver(devpath, &g_ramlogfops, 0666, priv);
|
ret = register_driver(devpath, &g_ramlogfops, 0666, priv);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
|
nxmutex_destroy(&priv->rl_lock);
|
||||||
|
#ifndef CONFIG_RAMLOG_NONBLOCKING
|
||||||
|
nxsem_destroy(&priv->rl_waitsem);
|
||||||
|
#endif
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1481,6 +1481,7 @@ static int usbclass_classobject(int minor,
|
|||||||
return OK;
|
return OK;
|
||||||
|
|
||||||
exit_free_driver:
|
exit_free_driver:
|
||||||
|
nxmutex_destroy(&alloc->dev.lock);
|
||||||
kmm_free(alloc);
|
kmm_free(alloc);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3077,6 +3077,7 @@ static FAR void *video_register(FAR const char *devpath)
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
verr("Failed to register driver: %d\n", ret);
|
verr("Failed to register driver: %d\n", ret);
|
||||||
|
nxmutex_destroy(&priv->lock_open_num);
|
||||||
kmm_free(priv->devpath);
|
kmm_free(priv->devpath);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|||||||
@@ -1480,11 +1480,15 @@ int cc1101_register(FAR const char *path, FAR struct cc1101_dev_s *dev)
|
|||||||
dev->fifo_len = 0;
|
dev->fifo_len = 0;
|
||||||
nxmutex_init(&dev->devlock);
|
nxmutex_init(&dev->devlock);
|
||||||
nxmutex_init(&dev->lock_rx_buffer);
|
nxmutex_init(&dev->lock_rx_buffer);
|
||||||
nxsem_init(&(dev->sem_rx), 0, 0);
|
nxsem_init(&dev->sem_rx, 0, 0);
|
||||||
nxsem_init(&(dev->sem_tx), 0, 0);
|
nxsem_init(&dev->sem_tx, 0, 0);
|
||||||
|
|
||||||
if (cc1101_init2(dev) < 0)
|
if (cc1101_init2(dev) < 0)
|
||||||
{
|
{
|
||||||
|
nxmutex_destroy(&dev->devlock);
|
||||||
|
nxmutex_destroy(&dev->lock_rx_buffer);
|
||||||
|
nxsem_destroy(&dev->sem_rx);
|
||||||
|
nxsem_destroy(&dev->sem_tx);
|
||||||
kmm_free(dev);
|
kmm_free(dev);
|
||||||
wlerr("ERROR: Failed to initialize cc1101_init\n");
|
wlerr("ERROR: Failed to initialize cc1101_init\n");
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|||||||
@@ -3491,7 +3491,6 @@ FAR void *gs2200m_register(FAR const char *devpath,
|
|||||||
|
|
||||||
size = sizeof(struct gs2200m_dev_s);
|
size = sizeof(struct gs2200m_dev_s);
|
||||||
dev = (FAR struct gs2200m_dev_s *)kmm_malloc(size);
|
dev = (FAR struct gs2200m_dev_s *)kmm_malloc(size);
|
||||||
|
|
||||||
if (!dev)
|
if (!dev)
|
||||||
{
|
{
|
||||||
wlerr("Failed to allocate instance.\n");
|
wlerr("Failed to allocate instance.\n");
|
||||||
@@ -3506,10 +3505,7 @@ FAR void *gs2200m_register(FAR const char *devpath,
|
|||||||
|
|
||||||
nxmutex_init(&dev->dev_lock);
|
nxmutex_init(&dev->dev_lock);
|
||||||
|
|
||||||
dev->pfd = NULL;
|
|
||||||
|
|
||||||
ret = gs2200m_initialize(dev, lower);
|
ret = gs2200m_initialize(dev, lower);
|
||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
wlerr("Failed to initialize driver: %d\n", ret);
|
wlerr("Failed to initialize driver: %d\n", ret);
|
||||||
@@ -3517,7 +3513,6 @@ FAR void *gs2200m_register(FAR const char *devpath,
|
|||||||
}
|
}
|
||||||
|
|
||||||
ret = register_driver(devpath, &g_gs2200m_fops, 0666, dev);
|
ret = register_driver(devpath, &g_gs2200m_fops, 0666, dev);
|
||||||
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
wlerr("Failed to register driver: %d\n", ret);
|
wlerr("Failed to register driver: %d\n", ret);
|
||||||
@@ -3525,10 +3520,16 @@ FAR void *gs2200m_register(FAR const char *devpath,
|
|||||||
}
|
}
|
||||||
|
|
||||||
ret = netdev_register(&dev->net_dev, NET_LL_IEEE80211);
|
ret = netdev_register(&dev->net_dev, NET_LL_IEEE80211);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
unregister_driver(devpath);
|
||||||
|
goto errout;
|
||||||
|
}
|
||||||
|
|
||||||
return (FAR void *)dev;
|
return dev;
|
||||||
|
|
||||||
errout:
|
errout:
|
||||||
|
nxmutex_destroy(&dev->dev_lock);
|
||||||
kmm_free(dev);
|
kmm_free(dev);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1439,10 +1439,14 @@ static int nrf24l01_unregister(FAR struct nrf24l01_dev_s *dev)
|
|||||||
/* Free memory */
|
/* Free memory */
|
||||||
|
|
||||||
#ifdef CONFIG_WL_NRF24L01_RXSUPPORT
|
#ifdef CONFIG_WL_NRF24L01_RXSUPPORT
|
||||||
|
nxmutex_destroy(&dev->lock_fifo);
|
||||||
|
nxsem_destroy(&dev->sem_rx);
|
||||||
kmm_free(dev->rx_fifo);
|
kmm_free(dev->rx_fifo);
|
||||||
#endif
|
#endif
|
||||||
kmm_free(dev);
|
|
||||||
|
|
||||||
|
nxmutex_destroy(&dev->devlock);
|
||||||
|
nxsem_destroy(&dev->sem_tx);
|
||||||
|
kmm_free(dev);
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1484,6 +1488,8 @@ int nrf24l01_register(FAR struct spi_dev_s *spi,
|
|||||||
#ifdef CONFIG_WL_NRF24L01_RXSUPPORT
|
#ifdef CONFIG_WL_NRF24L01_RXSUPPORT
|
||||||
if ((rx_fifo = kmm_malloc(CONFIG_WL_NRF24L01_RXFIFO_LEN)) == NULL)
|
if ((rx_fifo = kmm_malloc(CONFIG_WL_NRF24L01_RXFIFO_LEN)) == NULL)
|
||||||
{
|
{
|
||||||
|
nxmutex_destroy(&dev->devlock);
|
||||||
|
nxsem_destroy(&dev->sem_tx);
|
||||||
kmm_free(dev);
|
kmm_free(dev);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
@@ -1491,7 +1497,7 @@ int nrf24l01_register(FAR struct spi_dev_s *spi,
|
|||||||
dev->rx_fifo = rx_fifo;
|
dev->rx_fifo = rx_fifo;
|
||||||
|
|
||||||
nxmutex_init(&dev->lock_fifo);
|
nxmutex_init(&dev->lock_fifo);
|
||||||
nxsem_init(&(dev->sem_rx), 0, 0);
|
nxsem_init(&dev->sem_rx, 0, 0);
|
||||||
nxsem_set_protocol(&dev->sem_rx, SEM_PRIO_NONE);
|
nxsem_set_protocol(&dev->sem_rx, SEM_PRIO_NONE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -2670,7 +2670,7 @@ int spirit_netdev_initialize(FAR struct spi_dev_s *spi,
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
wlerr("ERROR: spirit_hw_initialize failed: %d\n", ret);
|
wlerr("ERROR: spirit_hw_initialize failed: %d\n", ret);
|
||||||
goto errout_with_attach;
|
goto errout_with_alloc;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_NET_6LOWPAN
|
#ifdef CONFIG_NET_6LOWPAN
|
||||||
@@ -2682,15 +2682,6 @@ int spirit_netdev_initialize(FAR struct spi_dev_s *spi,
|
|||||||
priv->radio.r_dev.d_buf = g_iobuffer.rb_buf;
|
priv->radio.r_dev.d_buf = g_iobuffer.rb_buf;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Register the device with the OS so that IOCTLs can be performed. */
|
|
||||||
|
|
||||||
ret = netdev_register(dev, NET_LL_PKTRADIO);
|
|
||||||
if (ret < 0)
|
|
||||||
{
|
|
||||||
wlerr("ERROR: netdev_register failed: %d\n", ret);
|
|
||||||
goto errout_with_attach;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Attach irq */
|
/* Attach irq */
|
||||||
|
|
||||||
ret = lower->attach(lower, spirit_interrupt, priv);
|
ret = lower->attach(lower, spirit_interrupt, priv);
|
||||||
@@ -2700,6 +2691,15 @@ int spirit_netdev_initialize(FAR struct spi_dev_s *spi,
|
|||||||
goto errout_with_alloc;
|
goto errout_with_alloc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Register the device with the OS so that IOCTLs can be performed. */
|
||||||
|
|
||||||
|
ret = netdev_register(dev, NET_LL_PKTRADIO);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
wlerr("ERROR: netdev_register failed: %d\n", ret);
|
||||||
|
goto errout_with_attach;
|
||||||
|
}
|
||||||
|
|
||||||
/* Enable Radio IRQ */
|
/* Enable Radio IRQ */
|
||||||
|
|
||||||
lower->enable(lower, true);
|
lower->enable(lower, true);
|
||||||
@@ -2709,6 +2709,8 @@ errout_with_attach:
|
|||||||
lower->attach(lower, NULL, NULL);
|
lower->attach(lower, NULL, NULL);
|
||||||
|
|
||||||
errout_with_alloc:
|
errout_with_alloc:
|
||||||
|
nxmutex_destroy(&priv->rxlock);
|
||||||
|
nxmutex_destroy(&priv->txlock);
|
||||||
kmm_free(priv);
|
kmm_free(priv);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -2045,7 +2045,7 @@ static int nfs_bind(FAR struct inode *blkdriver, FAR const void *data,
|
|||||||
if (!rpc)
|
if (!rpc)
|
||||||
{
|
{
|
||||||
ferr("ERROR: Failed to allocate rpc structure\n");
|
ferr("ERROR: Failed to allocate rpc structure\n");
|
||||||
return -ENOMEM;
|
goto bad;
|
||||||
}
|
}
|
||||||
|
|
||||||
finfo("Connecting\n");
|
finfo("Connecting\n");
|
||||||
|
|||||||
@@ -304,6 +304,7 @@ errout_with_buffer:
|
|||||||
errout_with_cache:
|
errout_with_cache:
|
||||||
kmm_free(volume->cache);
|
kmm_free(volume->cache);
|
||||||
errout_with_volume:
|
errout_with_volume:
|
||||||
|
nxmutex_destroy(&volume->lock);
|
||||||
#ifndef CONFIG_NXFFS_PREALLOCATED
|
#ifndef CONFIG_NXFFS_PREALLOCATED
|
||||||
kmm_free(volume);
|
kmm_free(volume);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -863,11 +863,7 @@ int mac802154dev_register(MACHANDLE mac, int minor)
|
|||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
nerr("ERROR: Failed to bind the MAC callbacks: %d\n", ret);
|
nerr("ERROR: Failed to bind the MAC callbacks: %d\n", ret);
|
||||||
|
goto errout_with_priv;
|
||||||
/* Free memory and return the error */
|
|
||||||
|
|
||||||
kmm_free(dev);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create the character device name */
|
/* Create the character device name */
|
||||||
|
|||||||
@@ -1338,6 +1338,7 @@ int mac802154netdev_register(MACHANDLE mac)
|
|||||||
return macnet_ifdown(&priv->md_dev.r_dev);
|
return macnet_ifdown(&priv->md_dev.r_dev);
|
||||||
|
|
||||||
errout:
|
errout:
|
||||||
|
nxmutex_destroy(&priv->md_lock);
|
||||||
|
|
||||||
/* Free memory and return the error */
|
/* Free memory and return the error */
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user