diff --git a/lib/exampletask/GwExampleTask.cpp b/lib/exampletask/GwExampleTask.cpp index 9b4cbcd..821dd57 100644 --- a/lib/exampletask/GwExampleTask.cpp +++ b/lib/exampletask/GwExampleTask.cpp @@ -156,11 +156,11 @@ class ExampleWebData{ vSemaphoreDelete(lock); } void set(int v){ - GWSYNCHRONIZED(&lock); + GWSYNCHRONIZED(lock); data=v; } int get(){ - GWSYNCHRONIZED(&lock); + GWSYNCHRONIZED(lock); return data; } }; diff --git a/lib/socketserver/GwTcpClient.cpp b/lib/socketserver/GwTcpClient.cpp index e5f914b..2792300 100644 --- a/lib/socketserver/GwTcpClient.cpp +++ b/lib/socketserver/GwTcpClient.cpp @@ -246,7 +246,7 @@ void GwTcpClient::resolveHost(String host) { LOG_DEBUG(GwLog::LOG,"start resolving %s",host.c_str()); { - GWSYNCHRONIZED(&locker); + GWSYNCHRONIZED(locker); resolvedAddress.resolved = false; } state = C_RESOLVING; @@ -283,12 +283,12 @@ void GwTcpClient::resolveHost(String host) void GwTcpClient::setResolved(IPAddress addr, bool valid){ LOG_DEBUG(GwLog::LOG,"setResolved %s, valid=%s", addr.toString().c_str(),(valid?"true":"false")); - GWSYNCHRONIZED(&locker); + GWSYNCHRONIZED(locker); resolvedAddress.address=addr; resolvedAddress.resolved=valid; state=C_RESOLVED; } GwTcpClient::ResolvedAddress GwTcpClient::getResolved(){ - GWSYNCHRONIZED(&locker); + GWSYNCHRONIZED(locker); return resolvedAddress; } \ No newline at end of file diff --git a/lib/usercode/GwUserCode.h b/lib/usercode/GwUserCode.h index 94e745d..5007d3e 100644 --- a/lib/usercode/GwUserCode.h +++ b/lib/usercode/GwUserCode.h @@ -38,13 +38,14 @@ class TaskInterfacesStorage; class GwUserCode{ GwLog *logger; GwApiInternal *api; - SemaphoreHandle_t *mainLock; + SemaphoreHandle_t mainLock=nullptr; TaskInterfacesStorage *taskData; void startAddOnTask(GwApiInternal *api,GwUserTask *task,int sourceId,String name); public: ~GwUserCode(); typedef std::map Capabilities; - GwUserCode(GwApiInternal *api, SemaphoreHandle_t *mainLock); + GwUserCode(GwApiInternal *api); + void begin(SemaphoreHandle_t mainLock){this->mainLock=mainLock;} void startUserTasks(int baseId); void startInitTasks(int baseId); void startAddonTask(String name,TaskFunction_t task, int id); diff --git a/src/main.cpp b/src/main.cpp index ae8f3d5..e781ada 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -235,17 +235,17 @@ void SendNMEA0183Message(const tNMEA0183Msg &NMEA0183Msg, int sourceId,bool conv class CalibrationValues { using Map=std::map; Map values; - SemaphoreHandle_t lock; + SemaphoreHandle_t lock=nullptr; public: CalibrationValues(){ lock=xSemaphoreCreateMutex(); } void set(const String &name,double value){ - GWSYNCHRONIZED(&lock); + GWSYNCHRONIZED(lock); values[name]=value; } bool get(const String &name, double &value){ - GWSYNCHRONIZED(&lock); + GWSYNCHRONIZED(lock); auto it=values.find(name); if (it==values.end()) return false; value=it->second; @@ -373,7 +373,7 @@ bool delayedRestart(){ },"reset",2000,&logger,0,NULL) == pdPASS; } ApiImpl *apiImpl=new ApiImpl(MIN_USER_TASK); -GwUserCode userCodeHandler(apiImpl,&mainLock); +GwUserCode userCodeHandler(apiImpl); #define JSON_OK "{\"status\":\"OK\"}" #define JSON_INVALID_PASS F("{\"status\":\"invalid password\"}") @@ -788,6 +788,7 @@ void setup() { logger.setWriter(new DefaultLogWriter()); #endif boatData.begin(); + userCodeHandler.begin(mainLock); userCodeHandler.startInitTasks(MIN_USER_TASK); channels.preinit(); config.stopChanges(); @@ -937,7 +938,7 @@ void setup() { logger.logDebug(GwLog::LOG,"starting addon tasks"); logger.flush(); { - GWSYNCHRONIZED(&mainLock); + GWSYNCHRONIZED(mainLock); userCodeHandler.startUserTasks(MIN_USER_TASK); } timers.addAction(HEAP_REPORT_TIME,[](){ @@ -967,7 +968,7 @@ void handleSendAndRead(bool handleRead){ void loopRun() { //logger.logDebug(GwLog::DEBUG,"main loop start"); monitor.reset(); - GWSYNCHRONIZED(&mainLock); + GWSYNCHRONIZED(mainLock); logger.flush(); monitor.setTime(1); gwWifi.loop();