signal caught segfault fix

fixing_gr_cariboulite
David Michaeli 2024-01-29 15:50:45 +02:00
rodzic 35e832e25d
commit 5ca7c52d81
4 zmienionych plików z 15 dodań i 7 usunięć

Wyświetl plik

@ -243,7 +243,7 @@ public:
std::string GetHwGuid(void);
CaribouLiteRadio* GetRadioChannel(CaribouLiteRadio::RadioType ch);
// Ststic detection and factory
// Static detection and factory
static CaribouLite &GetInstance(bool forceFpgaProg = false, LogLevel logLvl = LogLevel::None);
static bool DetectBoard(SysVersion *sysVer, std::string& name, std::string& guid);
static void DefaultSignalHandler(void* context, int signal_number, siginfo_t *si);

Wyświetl plik

@ -9,7 +9,7 @@ void CaribouLite::DefaultSignalHandler(void* context, int signal_number, siginfo
{
CaribouLite* cl = (CaribouLite*)context;
std::cout << " >> Signal caught: " << signal_number << std::endl << std::flush;
cl->ReleaseResources();
//cl->ReleaseResources();
}
//==================================================================
@ -81,12 +81,19 @@ CaribouLite::CaribouLite(bool forceFpgaProg, LogLevel logLvl)
void CaribouLite::ReleaseResources(void)
{
if (!_instance) return;
for (size_t i = 0; i < _instance->_channels.size(); i++)
{
if (_instance->_channels[i]) delete _instance->_channels[i];
_instance->_channels[i] = NULL;
if (_instance->_channels[i])
{
delete _instance->_channels[i];
}
}
if (cariboulite_is_initialized())
{
cariboulite_close();
}
if (cariboulite_is_initialized()) cariboulite_close();
}
//==================================================================

Wyświetl plik

@ -153,6 +153,7 @@ int caribou_fpga_set_debug_modes (caribou_fpga_st* dev, bool dbg_fifo_push, bool
int caribou_fpga_set_sys_ctrl_tx_sample_gap (caribou_fpga_st* dev, uint8_t gap);
int caribou_fpga_get_sys_ctrl_tx_sample_gap (caribou_fpga_st* dev, uint8_t *gap);
// I/O Controller
int caribou_fpga_set_io_ctrl_mode (caribou_fpga_st* dev, uint8_t debug_mode, caribou_fpga_io_ctrl_rfm_en rfm);
int caribou_fpga_get_io_ctrl_mode (caribou_fpga_st* dev, uint8_t *debug_mode, caribou_fpga_io_ctrl_rfm_en *rfm);

Wyświetl plik

@ -35,13 +35,13 @@ static void internal_sighandler( struct sys_st_t *sys,
int signal_number,
siginfo_t *si)
{
if (ctx.sighandler) ctx.sighandler(ctx.sig_context, signal_number, si);
if (ctx.signal_shown != signal_number)
{
fprintf(stderr, "Received signal %d", signal_number);
ctx.signal_shown = signal_number;
}
if (ctx.sighandler) ctx.sighandler(ctx.sig_context, signal_number, si);
}
//=============================================================================