#include <rtl.h>                                      
#include <time.h>                                     
#include <pthread.h>
#include <rtl_sched.h>                                  
#include <linux/kernel.h>                             
#include <linux/module.h>
#include <rtl_debug.h>                             
                                                      
static pthread_t thread1;
static pthread_t thread2;

int i =0;                                             
void * start_routine1(void *param)                     
{                                                     
        int arg = (int) param;
        struct timespec zTime = {0,0};
        struct timespec remTime = {0,0};

       zTime.tv_sec = 10;
       zTime.tv_nsec = 0;
//       breakpoint();

       pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);
       pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL);                        
                                                      
        rtl_printf("Thread %d is running\n", (arg+1));
        
        if(nanosleep(&zTime,&remTime) == -1)
           {
            rtl_printf("nanosleep failed");
            /*return -1;*/
           }
        rtl_printf("start routine1:END");                                     
        return 0;                                     
                                                      
}                                                     

void * start_routine2(void *param)
{
        int arg = (int) param;
        
        rtl_printf("start routine2:BEGIN");

        rtl_printf("Thread %d is running\n", (arg+1));
        
        pthread_delete_np(thread1);
        rtl_printf("start routine2:END");

        return 0;
}

int init_module(void) {                                                   
        int ret1,ret2;                                                          
      ret1 = pthread_create (&thread1, NULL, start_routine1, (void *) i);
        if (ret1) {                                                        
          rtl_printf("failed to create thread %d\n", (i+1));                
      }                                                                   
                                                                          
      ret2 = pthread_create (&thread2, NULL, start_routine2, (void *) (i+1));
        if (ret2) 
      {                                                        
          rtl_printf("failed to create thread %d\n", (i+2));                
      }                                                                   
  return 0;                                                               
                                                                          
}                                                                         

void cleanup_module(void) {                               
                                                          
                #if 0
                if (thread1)                          
                        pthread_delete_np(thread1);
                #endif

                if (thread2)
                        pthread_delete_np(thread2);    
                      /*  pthread_cancel (threads[j]);    
                        pthread_join(threads[j], NULL); */
                                                         
}                                                         
