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:
Xiang Xiao
2022-10-17 00:50:59 +08:00
committed by Masayuki Ishikawa
parent dee38ce3e8
commit dca5a3483f
45 changed files with 110 additions and 46 deletions
+2
View File
@@ -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;
} }
+3
View File
@@ -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;
} }
+1
View File
@@ -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;
} }
+1
View File
@@ -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;
+1
View File
@@ -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);
+1
View File
@@ -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;
} }
+1
View File
@@ -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);
} }
+1
View File
@@ -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);
} }
+1
View File
@@ -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);
} }
+1
View File
@@ -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);
} }
+1
View File
@@ -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;
} }
+2
View File
@@ -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);
} }
+3 -1
View File
@@ -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;
} }
+1
View File
@@ -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);
} }
+1
View File
@@ -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;
+1
View File
@@ -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");
+3 -1
View File
@@ -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;
+1
View File
@@ -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;
} }
+1 -1
View File
@@ -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;
} }
+3 -1
View File
@@ -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;
} }
+5 -3
View File
@@ -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
+3 -1
View File
@@ -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);
+1
View File
@@ -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;
+5 -3
View File
@@ -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
+3
View File
@@ -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;
} }
+1
View File
@@ -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);
} }
+1
View File
@@ -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);
} }
+1
View File
@@ -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);
} }
+1
View File
@@ -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);
} }
+1
View File
@@ -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);
} }
+1
View File
@@ -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);
} }
+1
View File
@@ -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;
} }
+3
View File
@@ -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;
} }
+1
View File
@@ -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);
} }
+4
View File
@@ -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);
} }
} }
+1
View File
@@ -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;
} }
+1
View File
@@ -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;
+6 -2
View File
@@ -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;
+7 -6
View File
@@ -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;
} }
+8 -2
View File
@@ -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
+12 -10
View File
@@ -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
View File
@@ -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");
+1
View File
@@ -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
+1 -5
View File
@@ -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 */
+1
View File
@@ -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 */