From: John K. <jmk...@us...> - 2004-03-28 17:45:40
|
Update of /cvsroot/emc/emc2/src/hal In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27198/src/hal Modified Files: hal.h hal_lib.c Log Message: misc hal changes related to threads and parameter types Index: hal_lib.c =================================================================== RCS file: /cvsroot/emc/emc2/src/hal/hal_lib.c,v retrieving revision 1.14 retrieving revision 1.15 diff -C2 -d -r1.14 -r1.15 *** hal_lib.c 23 Mar 2004 06:49:15 -0000 1.14 --- hal_lib.c 28 Mar 2004 17:34:19 -0000 1.15 *************** *** 1054,1066 **** } ! int hal_create_thread(char *name, unsigned long period_nsec, ! int uses_fp, int comp_id) { int next, cmp, prev_priority; int retval, n; hal_thread_t *new, *tptr; - hal_comp_t *comp; long curr_period; char buf[HAL_NAME_LEN + 1]; if (hal_data == 0) { --- 1054,1066 ---- } ! int hal_create_thread(char *name, unsigned long period_nsec, int uses_fp) { int next, cmp, prev_priority; int retval, n; hal_thread_t *new, *tptr; long curr_period; + #if 0 char buf[HAL_NAME_LEN + 1]; + #endif if (hal_data == 0) { *************** *** 1071,1086 **** /* get mutex before accessing shared data */ rtapi_mutex_get(&(hal_data->mutex)); - /* validate comp_id */ - comp = halpr_find_comp_by_id(comp_id); - if (comp == 0) { - /* bad comp_id */ - rtapi_mutex_give(&(hal_data->mutex)); - return HAL_INVAL; - } - if (comp->type == 0) { - /* not a realtime component */ - rtapi_mutex_give(&(hal_data->mutex)); - return HAL_INVAL; - } /* make sure name is unique on thread list */ next = hal_data->thread_list_ptr; --- 1071,1074 ---- *************** *** 1168,1177 **** new->runtime = 0; new->maxtime = 0; /* create a parameter with the thread's runtime in it */ rtapi_snprintf(buf, HAL_NAME_LEN, "%s.time", name); ! hal_param_s32_new(buf, HAL_RD, &(new->runtime), comp_id); /* create a parameter with the thread's maximum runtime in it */ rtapi_snprintf(buf, HAL_NAME_LEN, "%s.tmax", name); ! hal_param_s32_new(buf, HAL_RD_WR, &(new->maxtime), comp_id); return HAL_SUCCESS; } --- 1156,1172 ---- new->runtime = 0; new->maxtime = 0; + #if 0 + /* These params need to be re-visited when I refactor HAL. Right + now they cause problems - they can no longer be owned by the calling + component, and they can't be owned by the hal_lib because it isn't + actually a component. + */ /* create a parameter with the thread's runtime in it */ rtapi_snprintf(buf, HAL_NAME_LEN, "%s.time", name); ! hal_param_s32_new(buf, HAL_RD, &(new->runtime), lib_module_id); /* create a parameter with the thread's maximum runtime in it */ rtapi_snprintf(buf, HAL_NAME_LEN, "%s.tmax", name); ! hal_param_s32_new(buf, HAL_RD_WR, &(new->maxtime), lib_module_id); ! #endif return HAL_SUCCESS; } *************** *** 2404,2407 **** --- 2399,2407 ---- hal_funct_entry_t *funct_entry; hal_list_t *list_root, *list_entry; + #if 0 + int *prev, next; + char time[HAL_NAME_LEN + 5], tmax[HAL_NAME_LEN + 5]; + hal_param_t *param; + #endif /* if we're deleting a thread, we need to stop all threads */ *************** *** 2426,2429 **** --- 2426,2457 ---- free_funct_entry_struct(funct_entry); } + #if 0 + /* Currently these don't get created, so we don't have to worry + about deleting them. They will come back when the HAL refactor + is done, at that time this code or something like it will be + needed. + */ + /* need to delete <thread>.time and <thread>.tmax params */ + rtapi_snprintf(time, HAL_NAME_LEN, "%s.time", thread->name); + rtapi_snprintf(tmax, HAL_NAME_LEN, "%s.tmax", thread->name); + /* search the parameter list for those parameters */ + prev = &(hal_data->param_list_ptr); + next = *prev; + while (next != 0) { + param = SHMPTR(next); + /* does this param match either name? */ + if ((strcmp(param->name, time) == 0) + || (strcmp(param->name, tmax) == 0)) { + /* yes, unlink from list */ + *prev = param->next_ptr; + /* and delete it */ + free_param_struct(param); + } else { + /* no match, try the next one */ + prev = &(param->next_ptr); + } + next = *prev; + } + #endif thread->name[0] = '\0'; /* add thread to free list */ Index: hal.h =================================================================== RCS file: /cvsroot/emc/emc2/src/hal/hal.h,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** hal.h 23 Mar 2004 06:49:15 -0000 1.6 --- hal.h 28 Mar 2004 17:34:04 -0000 1.7 *************** *** 557,562 **** be non-zero for most threads, with the possible exception of the very fastest, most critical thread in a system. - 'comp_id' is the ID of the calling component, as returned by - a call to hal_init(). On success, hal_create_thread() returns a positive integer thread ID. On failure, returns an error code as defined --- 557,560 ---- *************** *** 565,569 **** */ extern int hal_create_thread(char *name, unsigned long period_nsec, ! int uses_fp, int comp_id); /** hal_thread_delete() deletes a realtime thread. --- 563,567 ---- */ extern int hal_create_thread(char *name, unsigned long period_nsec, ! int uses_fp); /** hal_thread_delete() deletes a realtime thread. |