# HG changeset patch # User greg # Date 1255015275 -7200 # Node ID f91ee161b3a1e6d04d54adfc47524fb155e284e4 # Parent fff2177644318261cfedc18d61a630c7d51dd9c0 -add LeaveMutex to avoid canopenshell deadlock when call NodeInit -Now call the first setalarm from StartTimerLoop instead of the Timerthreadloop (like linux) diff -r fff217764431 -r f91ee161b3a1 drivers/timers_win32/timers_win32.c --- a/drivers/timers_win32/timers_win32.c Mon Oct 05 11:35:40 2009 +0200 +++ b/drivers/timers_win32/timers_win32.c Thu Oct 08 17:21:15 2009 +0200 @@ -76,10 +76,7 @@ int TimerThreadLoop(void) { - EnterMutex(); - // At first, TimeDispatch will call init_callback. - SetAlarm(NULL, 0, init_callback, 0, 0); - LeaveMutex(); + while(!stop_timer) { @@ -134,6 +131,10 @@ unsigned long timer_thread_id; stop_timer = 0; init_callback = _init_callback; + EnterMutex(); + // At first, TimeDispatch will call init_callback. + SetAlarm(NULL, 0, init_callback, 0, 0); + LeaveMutex(); timer_thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)TimerThreadLoop, NULL, 0, &timer_thread_id); } diff -r fff217764431 -r f91ee161b3a1 examples/CANOpenShell/CANOpenShell.c --- a/examples/CANOpenShell/CANOpenShell.c Mon Oct 05 11:35:40 2009 +0200 +++ b/examples/CANOpenShell/CANOpenShell.c Thu Oct 08 17:21:15 2009 +0200 @@ -55,7 +55,7 @@ //**************************************************************************** // GLOBALS -char BoardBusName[11]; +char BoardBusName[31]; char BoardBaudRate[5]; s_BOARD Board = {BoardBusName, BoardBaudRate}; CO_Data* CANOpenShellOD_Data; @@ -407,7 +407,7 @@ LeaveMutex(); return QUIT; case cst_str4('l', 'o', 'a', 'd') : /* Library Interface*/ - ret = sscanf(command, "load#%100[^,],%10[^,],%4[^,],%d,%d", + ret = sscanf(command, "load#%100[^,],%30[^,],%4[^,],%d,%d", LibraryPath, BoardBusName, BoardBaudRate, @@ -416,10 +416,14 @@ if(ret == 5) { + LeaveMutex(); ret = NodeInit(NodeID, NodeType); - LeaveMutex(); return ret; } + else + { + printf("Invalid load parameters\n"); + } break; default : help_menu();