rem: pthread_create( &(hash_table->timer_thread_id), NULL, timer_routine, hash_table ); #endif
add: pthread_create( thread, NULL, timer_routine, hash_table );
context: struct s_table* init_hash_table(){   struct s_table*  hash_table;   int       i;   /*allocs the table*/   hash_table = sh_malloc(  sizeof( struct s_table ) );   if ( !hash_table )	goto error;   memset( hash_table, 0, sizeof (struct s_table ) );   /*inits the time*/   hash_table->time = 0;   /* try first allocating all the structures needed for syncing */   if (lock_initialize()==-1)	goto error;   /* allocs the entry's table */    hash_table->entrys  = sh_malloc( TABLE_ENTRIES * sizeof( struct entry )  );    if ( !hash_table->entrys )	goto error;    /* inits the entrys */    for(  i=0 ; i<TABLE_ENTRIES; i++ )    {       hash_table->entrys[i].first_cell = 0;       hash_table->entrys[i].last_cell = 0;       hash_table->entrys[i].next_label = 0;       init_entry_lock( hash_table , (hash_table->entrys)+i );    }   /* allocs the transaction timer's table */    hash_table->timers  = sh_malloc( NR_OF_TIMER_LISTS * sizeof( struct timer )  );    if ( !hash_table->timers )	goto error;   /* inits the timers*/    for(  i=0 ; i<NR_OF_TIMER_LISTS ; i++ )    {       hash_table->timers[i].first_tl = 0;       hash_table->timers[i].last_tl = 0;       //init_timerlist_lock( hash_table, (hash_table->timers)+i );       init_timerlist_lock( hash_table, i );    }#ifdef THREAD   /* starts the timer thread/ process */   pthread_create( &(hash_table->timer_thread_id), NULL, timer_routine, hash_table );#endif   return  hash_table;error:   free_hash_table( hash_table );   lock_cleanup();   return 0;}