FACT++  1.0
dim_thr_old.c
Go to the documentation of this file.
1 #include <signal.h>
2 #define DIMLIB
3 #include "dim.h"
4 
5 #ifndef WIN32
6 
7 #ifndef NOTHREADS
8 #include <pthread.h>
9 #include <semaphore.h>
10 #ifdef solaris
11 #include <synch.h>
12 #endif
13 #ifdef darwin
14 #include <sys/types.h>
15 #include <sys/stat.h>
16 #endif
17 
18 pthread_t IO_thread = 0;
19 pthread_t ALRM_thread = 0;
20 pthread_t INIT_thread = 0;
21 pthread_t MAIN_thread = 0;
22 #ifndef darwin
24 /*
25 sem_t DIM_WAIT_Sema;
26 */
27 #else
28 sem_t *DIM_INIT_Semap;
29 /*
30 sem_t *DIM_WAIT_Semap;
31 */
32 #endif
33 int INIT_count = 0;
34 /*
35 int WAIT_count = 0;
36 */
38 
39 void *dim_tcpip_thread(void *tag)
40 {
41  extern int dim_tcpip_init();
42  extern void tcpip_task();
43  /*
44  int prio;
45 
46  thr_getprio(thr_self(),&prio);
47  thr_setprio(thr_self(),prio+10);
48  */
49  if(tag){}
50  IO_thread = pthread_self();
51 
52  dim_tcpip_init(1);
53  while(1)
54  {
55  if(INIT_thread)
56 #ifndef darwin
57  sem_post(&DIM_INIT_Sema);
58 #else
59  sem_post(DIM_INIT_Semap);
60 #endif
61  tcpip_task();
62  /*
63 #ifndef darwin
64  sem_post(&DIM_WAIT_Sema);
65 #else
66  sem_post(DIM_WAIT_Semap);
67 #endif
68  */
70  }
71 }
72 
73 void *dim_dtq_thread(void *tag)
74 {
75  extern int dim_dtq_init();
76  extern int dtq_task();
77  /*
78  int prio;
79 
80  thr_getprio(thr_self(),&prio);
81  thr_setprio(thr_self(),prio+5);
82  */
83  if(tag){}
84  ALRM_thread = pthread_self();
85 
86  dim_dtq_init(1);
87  while(1)
88  {
89  if(INIT_thread)
90  {
91 #ifndef darwin
92  sem_post(&DIM_INIT_Sema);
93 #else
94  sem_post(DIM_INIT_Semap);
95 #endif
96  }
97  dtq_task();
98  /*
99 #ifndef darwin
100  sem_post(&DIM_WAIT_Sema);
101 #else
102  sem_post(DIM_WAIT_Semap);
103 #endif
104  */
105  dim_signal_cond();
106  }
107 }
108 
109 void dim_init()
110 {
111  pthread_t t_id;
112  void ignore_sigpipe();
113  int ret;
114  extern int dna_init();
115 /*
116 #ifdef LYNXOS
117 */
118  pthread_attr_t attr;
119 /*
120 #endif
121 */
122  if(!DIM_THR_init_done)
123  {
124  /*
125  int prio;
126  */
127  DIM_THR_init_done = 1;
128  dna_init();
129  /*
130  thr_getprio(thr_self(),&prio);
131  thr_setprio(thr_self(),prio+3);
132  */
133  INIT_thread = pthread_self();
135 
136 #ifndef darwin
137  sem_init(&DIM_INIT_Sema, 0, INIT_count);
138  /*
139  sem_init(&DIM_WAIT_Sema, 0, WAIT_count);
140  */
141 #else
142  DIM_INIT_Semap = sem_open("/Dim_INIT_Sem", O_CREAT, S_IRUSR | S_IWUSR, INIT_count);
143  /*
144  DIM_WAIT_Semap = sem_open("/Dim_WAIT_Sem", O_CREAT, S_IRUSR | S_IWUSR, WAIT_count);
145  */
146 #endif
147 
148  ignore_sigpipe();
149 
150 #if defined (LYNXOS) && !defined (__Lynx__)
151  pthread_attr_create(&attr);
152  pthread_create(&t_id, attr, dim_dtq_thread, 0);
153 #else
154 /*
155  pthread_create(&t_id, NULL, dim_dtq_thread, 0);
156 */
157  pthread_attr_init(&attr);
158  pthread_attr_setinheritsched(&attr, PTHREAD_INHERIT_SCHED);
159  pthread_create(&t_id, &attr, dim_dtq_thread, 0);
160 #endif
161 #ifndef darwin
162  ret = sem_wait(&DIM_INIT_Sema);
163 #else
164  ret = sem_wait(DIM_INIT_Semap);
165 #endif
166 #if defined (LYNXOS) && !defined (__Lynx__)
167  pthread_create(&t_id, attr, dim_tcpip_thread, 0);
168 #else
169  pthread_create(&t_id, &attr, dim_tcpip_thread, 0);
170 #endif
171 #ifndef darwin
172  ret = sem_wait(&DIM_INIT_Sema);
173 #else
174  ret = sem_wait(DIM_INIT_Semap);
175 #endif
176  INIT_thread = 0;
177  }
178 }
179 
180 void dim_stop()
181 {
182  int i;
183  int n = 0;
184  void dim_tcpip_stop(), dim_dtq_stop();
185 
186  for( i = 0; i< Curr_N_Conns; i++ )
187  {
188  if(Net_conns[i].channel != 0)
189  n++;
190  }
191  if(n)
192  return;
193  if(IO_thread)
194  pthread_cancel(IO_thread);
195  if(ALRM_thread)
196  pthread_cancel(ALRM_thread);
197 #ifndef darwin
198  sem_destroy(&DIM_INIT_Sema);
199  /*
200  sem_destroy(&DIM_WAIT_Sema);
201  */
202 #else
203  sem_unlink("/Dim_INIT_Sem");
204  /*
205  sem_unlink("/Dim_WAIT_Sem");
206  */
207  sem_close(DIM_INIT_Semap);
208  /*
209  sem_close(DIM_WAIT_Semap);
210  */
211 #endif
212  dim_tcpip_stop();
213  dim_dtq_stop();
214  if(IO_thread)
215  pthread_join(IO_thread,0);
216  if(ALRM_thread)
217  pthread_join(ALRM_thread,0);
218  IO_thread = 0;
219  ALRM_thread = 0;
220  DIM_THR_init_done = 0;
221 }
222 
223 long dim_start_thread(void *(*thread_ast)(void *), long tag)
224 {
225  pthread_t t_id;
226  pthread_attr_t attr;
227 
228 #if defined (LYNXOS) && !defined (__Lynx__)
229  pthread_attr_create(&attr);
230  pthread_create(&t_id, attr, (void *)thread_ast, (void *)tag);
231 #else
232  pthread_attr_init(&attr);
233  pthread_create(&t_id, &attr, thread_ast, (void *)tag);
234 #endif
235  return((long)t_id);
236 }
237 
238 int dim_stop_thread(long t_id)
239 {
240  int ret;
241  ret = pthread_cancel((pthread_t)t_id);
243  printf("dim_stop_thread: this function is obsolete, it creates memory leaks\n");
244  return ret;
245 }
246 
247 int dim_set_scheduler_class(int pclass)
248 {
249 #ifdef __linux__
250  int ret, prio, p;
251  struct sched_param param;
252 
253  if(pclass == 0)
254  {
255  pclass = SCHED_OTHER;
256  }
257  else if(pclass == 1)
258  {
259  pclass = SCHED_FIFO;
260  }
261  else if(pclass == 2)
262  {
263  pclass = SCHED_RR;
264  }
265  prio = sched_get_priority_min(pclass);
266  ret = pthread_getschedparam(MAIN_thread, &p, &param);
267  if( (p == SCHED_OTHER) || (pclass == SCHED_OTHER) )
268  param.sched_priority = prio;
269  ret = pthread_setschedparam(MAIN_thread, pclass, &param);
270  if(ret)
271  return 0;
272  ret = pthread_getschedparam(IO_thread, &p, &param);
273  if( (p == SCHED_OTHER) || (pclass == SCHED_OTHER) )
274  param.sched_priority = prio;
275  ret = pthread_setschedparam(IO_thread, pclass, &param);
276  if(ret)
277  return 0;
278  ret = pthread_getschedparam(ALRM_thread, &p, &param);
279  if( (p == SCHED_OTHER) || (pclass == SCHED_OTHER) )
280  param.sched_priority = prio;
281  ret = pthread_setschedparam(ALRM_thread, pclass, &param);
282  if(!ret)
283  return 1;
284 #endif
285  return 0;
286 }
287 
288 int dim_get_scheduler_class(int *pclass)
289 {
290 #ifdef __linux__
291  int ret;
292  struct sched_param param;
293 
294  ret = pthread_getschedparam(MAIN_thread, pclass, &param);
295  if(!ret)
296  return 1;
297 #endif
298  return 0;
299 }
300 
301 int dim_set_priority(int threadId, int prio)
302 {
303 #ifdef __linux__
304  pthread_t id = MAIN_thread;
305  int ret;
306  int pclass;
307  struct sched_param param;
308 
309  if(threadId == 1)
310  id = MAIN_thread;
311  else if(threadId == 2)
312  id = IO_thread;
313  else if(threadId == 3)
314  id = ALRM_thread;
315 
316  ret = pthread_getschedparam(id, &pclass, &param);
317  param.sched_priority = prio;
318  ret = pthread_setschedparam(id, pclass, &param);
319  if(!ret)
320  return 1;
321 #endif
322  return 0;
323 }
324 
325 int dim_get_priority(int threadId, int *prio)
326 {
327 #ifdef __linux__
328  pthread_t id=MAIN_thread;
329  int ret;
330  int pclass;
331  struct sched_param param;
332 
333  if(threadId == 1)
334  id = MAIN_thread;
335  else if(threadId == 2)
336  id = IO_thread;
337  else if(threadId == 3)
338  id = ALRM_thread;
339 
340  ret = pthread_getschedparam(id, &pclass, &param);
341  *prio = param.sched_priority;
342  if(!ret)
343  return 1;
344 #endif
345  return 0;
346 }
347 
349 {
350 
351  struct sigaction sig_info;
352  sigset_t set;
353  void pipe_sig_handler();
354 
355  if( sigaction(SIGPIPE, 0, &sig_info) < 0 )
356  {
357  perror( "sigaction(SIGPIPE)" );
358  exit(1);
359  }
360  if(sig_info.sa_handler)
361  {
362 /*
363  printf("DIM ignore_sigpipe() - Handler already defined %08X\n", sig_info.sa_handler);
364 */
365  return;
366  }
367  sigemptyset(&set);
368  sig_info.sa_handler = pipe_sig_handler;
369  sig_info.sa_mask = set;
370 #ifndef LYNXOS
371  sig_info.sa_flags = SA_RESTART;
372 #else
373  sig_info.sa_flags = 0;
374 #endif
375 
376  if( sigaction(SIGPIPE, &sig_info, 0) < 0 )
377  {
378  perror( "sigaction(SIGPIPE)" );
379  exit(1);
380  }
381 }
382 
383 void pipe_sig_handler( int num )
384 {
385  if(num){}
386 /*
387  printf( "*** pipe_sig_handler called ***\n" );
388 */
389 }
390 
392 {
393  dim_init();
394 }
395 
397 {
398  dim_stop();
399 }
400 
401 int dim_wait(void)
402 {
403  pthread_t id;
404 
405  id = pthread_self();
406 
407  if((id == ALRM_thread) || (id == IO_thread))
408  {
409  return(-1);
410  }
411  /*
412 #ifndef darwin
413  sem_wait(&DIM_WAIT_Sema);
414 #else
415  sem_wait(DIM_WAIT_Semap);
416 #endif
417  */
418  dim_wait_cond();
419  return(-1);
420 }
421 
422 /*
423 static void show_ast()
424 {
425 sigset_t oset;
426 
427  sigprocmask(SIG_SETMASK,0,&oset);
428  printf("---THREAD id = %d, mask = %x %x\n",
429  pthread_self(), oset.__sigbits[1], oset.__sigbits[0]);
430 }
431 */
432 
433 pthread_t Dim_thr_locker = 0;
435 #ifdef LYNXOS
436 pthread_mutex_t Global_DIM_mutex;
437 pthread_mutex_t Global_cond_mutex;
438 pthread_cond_t Global_cond;
439 #else
440 pthread_mutex_t Global_DIM_mutex = PTHREAD_MUTEX_INITIALIZER;
441 pthread_mutex_t Global_cond_mutex = PTHREAD_MUTEX_INITIALIZER;
442 pthread_cond_t Global_cond = PTHREAD_COND_INITIALIZER;
443 #endif
444 
445 void dim_lock()
446 {
447  /*printf("Locking %d ", pthread_self());*/
448  if(Dim_thr_locker != pthread_self())
449  {
450  pthread_mutex_lock(&Global_DIM_mutex);
451  Dim_thr_locker=pthread_self();
452  /*printf(": Locked ");*/
453  }
454  /*printf("Counter = %d\n",Dim_thr_counter);*/
455  Dim_thr_counter++;
456 }
457 void dim_unlock()
458 {
459  /*printf("Un-Locking %d ", pthread_self());*/
460  Dim_thr_counter--;
461  /*printf("Counter = %d ",Dim_thr_counter);*/
462  if(!Dim_thr_counter)
463  {
464  Dim_thr_locker=0;
465  pthread_mutex_unlock(&Global_DIM_mutex);
466  /*printf(": Un-Locked ");*/
467  }
468  /* printf("\n");*/
469 }
470 
472 {
473  pthread_mutex_lock(&Global_cond_mutex);
474  pthread_cond_wait(&Global_cond, &Global_cond_mutex);
475  pthread_mutex_unlock(&Global_cond_mutex);
476 }
477 
479 {
480  pthread_mutex_lock(&Global_cond_mutex);
481  pthread_cond_broadcast(&Global_cond);
482  pthread_mutex_unlock(&Global_cond_mutex);
483 }
484 
485 #else
486 
487 void dim_init()
488 {
489 }
490 
491 void dim_init_threads()
492 {
493 }
494 
495 void dim_stop_threads()
496 {
497 }
498 
499 void dim_stop()
500 {
501 }
502 
503 int dim_wait()
504 {
505  pause();
506  return(-1);
507 }
508 
509 long dim_start_thread(void (*thread_ast)(), long tag)
510 
511 {
512  printf("dim_start_thread: not available\n");
513  return (long)0;
514 }
515 
516 int dim_stop_thread(long t_id)
517 {
518  printf("dim_stop_thread: not available\n");
519  return 0;
520 }
521 #endif
522 
523 #else
524 #include <windows.h>
525 
526 DWORD IO_thread = 0;
527 DWORD ALRM_thread = 0;
528 DWORD MAIN_thread = 0;
529 HANDLE hIO_thread;
530 HANDLE hALRM_thread;
531 HANDLE hMAIN_thread;
532 DllExp HANDLE Global_DIM_event_auto = 0;
533 DllExp HANDLE Global_DIM_mutex = 0;
534 DllExp HANDLE Global_DIM_event_manual = 0;
535 void dim_tcpip_stop(), dim_dtq_stop();
536 
537 typedef struct{
538  void (*thread_ast)();
539  long tag;
540 
541 }THREAD_PARAMS;
542 
543 #ifndef STDCALL
544 long dim_start_thread(void (*thread_ast)(), long tag)
545 #else
546 long dim_start_thread(unsigned long (*thread_ast)(void *), void *tag)
547 #endif
548 {
549 DWORD threadid = 0;
550 HANDLE hthread;
551 
552 #ifndef STDCALL
553  hthread = CreateThread(
554  NULL, /* no security attributes */
555  0, /* use default stack size */
556  (void *)thread_ast, /* thread function */
557  (void *)tag, /* argument to thread function */
558  0, /* use default creation flags */
559  &threadid); /* returns the thread identifier */
560 #else
561  hthread = CreateThread(
562  NULL, /* no security attributes */
563  0, /* use default stack size */
564  thread_ast, /* thread function */
565  tag, /* argument to thread function */
566  0, /* use default creation flags */
567  &threadid); /* returns the thread identifier */
568 #endif
569  return (long)hthread;
570 }
571 
572 
573 int dim_stop_thread(long thread_id)
574 {
575  int ret;
576 
577  ret = TerminateThread((HANDLE)thread_id, 0);
578  CloseHandle((HANDLE)thread_id);
579  printf("dim_stop_thread: this function is obsolete, it creates memory leaks\n");
580  return ret;
581 }
582 
583 
584 void create_io_thread()
585 {
586  int tcpip_task(void *);
587 
588 #ifndef STDCALL
589  hIO_thread = CreateThread(
590  NULL, /* no security attributes */
591  0, /* use default stack size */
592  (void *)tcpip_task, /* thread function */
593  0, /* argument to thread function */
594  0, /* use default creation flags */
595  &IO_thread); /* returns the thread identifier */
596 #else
597  hIO_thread = CreateThread(
598  NULL, /* no security attributes */
599  0, /* use default stack size */
600  tcpip_task, /* thread function */
601  0, /* argument to thread function */
602  0, /* use default creation flags */
603  &IO_thread); /* returns the thread identifier */
604 #endif
605 }
606 
607 void create_alrm_thread()
608 {
609 
610  int dtq_task(void *);
611 
612 #ifndef STDCALL
613  hALRM_thread = CreateThread(
614  NULL,
615  0,
616  (void *)dtq_task,
617  0,
618  0,
619  &ALRM_thread);
620 #else
621  hALRM_thread = CreateThread(
622  NULL,
623  0,
624  dtq_task,
625  0,
626  0,
627  &ALRM_thread);
628 #endif
629 }
630 
631 void dim_init_threads()
632 {
633  static int done = 0;
634 
635  if(!done)
636  {
637  hMAIN_thread = GetCurrentThread();
638  done = 1;
639  }
640 }
641 
642 void dim_stop_threads()
643 {
644  int i;
645  int n = 0;
646 
647  for( i = 0; i< Curr_N_Conns; i++ )
648  {
649  if(Net_conns[i].channel != 0)
650  n++;
651  }
652  if(n)
653  return;
654  if(hIO_thread)
655  TerminateThread(hIO_thread, 0);
656  if(hALRM_thread)
657  TerminateThread(hALRM_thread, 0);
658  if(Global_DIM_mutex)
659  CloseHandle(Global_DIM_mutex);
660  if(Global_DIM_event_auto)
661  CloseHandle(Global_DIM_event_auto);
662  if(Global_DIM_event_manual)
663  CloseHandle(Global_DIM_event_manual);
664  hIO_thread = 0;
665  hALRM_thread = 0;
666  Global_DIM_mutex = 0;
667  Global_DIM_event_auto = 0;
668  Global_DIM_event_manual = 0;
669  dim_tcpip_stop();
670  dim_dtq_stop();
671 }
672 
673 void dim_stop()
674 {
676 }
677 
678 int dim_set_scheduler_class(int pclass)
679 {
680  HANDLE hProc;
681  int ret;
682  DWORD p;
683 
684 #ifndef PXI
685  hProc = GetCurrentProcess();
686 
687  if(pclass == -1)
688  p = IDLE_PRIORITY_CLASS;
689 /*
690  else if(pclass == -1)
691  p = BELOW_NORMAL_PRIORITY_CLASS;
692 */
693  else if(pclass == 0)
694  p = NORMAL_PRIORITY_CLASS;
695 /*
696  else if(pclass == 1)
697  p == ABOVE_NORMAL_PRIORITY_CLASS;
698 */
699  else if(pclass == 1)
700  p = HIGH_PRIORITY_CLASS;
701  else if(pclass == 2)
702  p = REALTIME_PRIORITY_CLASS;
703  ret = SetPriorityClass(hProc, p);
704  if(ret)
705  return 1;
706  ret = GetLastError();
707  printf("ret = %x %d\n",ret, ret);
708  return 0;
709 #else
710  return 0;
711 #endif
712 }
713 
714 int dim_get_scheduler_class(int *pclass)
715 {
716  HANDLE hProc;
717  DWORD ret;
718 
719 #ifndef PXI
720  hProc = GetCurrentProcess();
721 
722  ret = GetPriorityClass(hProc);
723  if(ret == 0)
724  return 0;
725  if(ret == IDLE_PRIORITY_CLASS)
726  *pclass = -1;
727 /*
728  else if(ret == BELOW_NORMAL_PRIORITY_CLASS)
729  *pclass = -1;
730 */
731  else if(ret == NORMAL_PRIORITY_CLASS)
732  *pclass = 0;
733 /*
734  else if(ret == ABOVE_NORMAL_PRIORITY_CLASS)
735  *pclass = 1;
736 */
737  else if(ret == HIGH_PRIORITY_CLASS)
738  *pclass = 1;
739  else if(ret == REALTIME_PRIORITY_CLASS)
740  *pclass = 2;
741  return 1;
742 #else
743  *pclass = 0;
744  return 0;
745 #endif
746 }
747 
748 int dim_set_priority(int threadId, int prio)
749 {
750  HANDLE id;
751  int ret, p;
752 
753 #ifndef PXI
754  if(threadId == 1)
755  id = hMAIN_thread;
756  else if(threadId == 2)
757  id = hIO_thread;
758  else if(threadId == 3)
759  id = hALRM_thread;
760 
761  if(prio == -3)
762  p = THREAD_PRIORITY_IDLE;
763  if(prio == -2)
764  p = THREAD_PRIORITY_LOWEST;
765  if(prio == -1)
766  p = THREAD_PRIORITY_BELOW_NORMAL;
767  if(prio == 0)
768  p = THREAD_PRIORITY_NORMAL;
769  if(prio == 1)
770  p = THREAD_PRIORITY_ABOVE_NORMAL;
771  if(prio == 2)
772  p = THREAD_PRIORITY_HIGHEST;
773  if(prio == 3)
774  p = THREAD_PRIORITY_TIME_CRITICAL;
775 
776  ret = SetThreadPriority(id, p);
777  if(ret)
778  return 1;
779  return 0;
780 #else
781  return 0;
782 #endif
783 }
784 
785 int dim_get_priority(int threadId, int *prio)
786 {
787  HANDLE id;
788  int ret, p;
789 
790 #ifndef PXI
791  if(threadId == 1)
792  id = hMAIN_thread;
793  else if(threadId == 2)
794  id = hIO_thread;
795  else if(threadId == 3)
796  id = hALRM_thread;
797 
798  ret = GetThreadPriority(id);
799  if(ret == THREAD_PRIORITY_ERROR_RETURN)
800  return 0;
801  if(ret == THREAD_PRIORITY_IDLE)
802  p = -3;
803  if(ret == THREAD_PRIORITY_LOWEST)
804  p = -2;
805  if(ret == THREAD_PRIORITY_BELOW_NORMAL)
806  p = -1;
807  if(ret == THREAD_PRIORITY_NORMAL)
808  p = 0;
809  if(ret == THREAD_PRIORITY_ABOVE_NORMAL)
810  p = 1;
811  if(ret == THREAD_PRIORITY_HIGHEST)
812  p = 2;
813  if(ret == THREAD_PRIORITY_TIME_CRITICAL)
814  p = 3;
815  *prio = p;
816  return 1;
817 #else
818  *prio = 0;
819  return 0;
820 #endif
821 }
822 
823 void dim_init()
824 {
825 }
826 
827 void dim_no_threads()
828 {
829 }
830 
831 int dim_wait()
832 {
833  pause();
834  return(1);
835 }
836 
837 void dim_lock()
838 {
839  if(!Global_DIM_mutex)
840  {
841  Global_DIM_mutex = CreateMutex(NULL,FALSE,NULL);
842  }
843  WaitForSingleObject(Global_DIM_mutex, INFINITE);
844 }
845 
846 void dim_unlock()
847 {
848  ReleaseMutex(Global_DIM_mutex);
849 }
850 
851 void dim_pause()
852 {
853 HANDLE handles[2];
854 
855  if(!Global_DIM_event_auto)
856  {
857  Global_DIM_event_auto = CreateEvent(NULL,FALSE,FALSE,NULL);
858  Global_DIM_event_manual = CreateEvent(NULL,TRUE,FALSE,NULL);
859  }
860  else
861  {
862 /*
863  WaitForSingleObject(Global_DIM_event, INFINITE);
864 */
865  handles[0] = Global_DIM_event_auto;
866  handles[1] = Global_DIM_event_manual;
867  WaitForMultipleObjects(2, handles, FALSE, INFINITE);
868  }
869 }
870 
871 void dim_wake_up()
872 {
873  if(Global_DIM_event_auto)
874  {
875  SetEvent(Global_DIM_event_auto);
876  }
877  if(Global_DIM_event_manual)
878  {
879  SetEvent(Global_DIM_event_manual);
880  ResetEvent(Global_DIM_event_manual);
881  }
882 }
883 
884 void dim_sleep(unsigned int t)
885 {
886  Sleep(t*1000);
887 }
888 
889 void dim_win_usleep(unsigned int t)
890 {
891  Sleep(t/1000);
892 }
893 
894 #endif
int dim_set_priority(int threadId, int prio)
Definition: dim_thr_old.c:301
DllExp DIM_NOSHARE int Curr_N_Conns
Definition: conn_handler.c:33
int dtq_task(void *dummy)
Definition: dtq.c:307
int dim_set_scheduler_class(int pclass)
Definition: dim_thr_old.c:247
void dim_tcpip_stop()
Definition: tcpip.c:341
int i
Definition: db_dim_client.c:21
DllExp DIM_NOSHARE NET_CONNECTION * Net_conns
Definition: conn_handler.c:32
#define TRUE
Definition: dim.h:135
void dim_stop()
Definition: dim_thr_old.c:180
pthread_t MAIN_thread
Definition: dim_thr_old.c:21
#define FALSE
Definition: dim.h:136
char id[4]
Definition: FITS.h:71
int dim_dtq_init(int thr_flag)
Definition: dtq.c:91
void dim_wait_cond()
Definition: dim_thr_old.c:471
int INIT_count
Definition: dim_thr_old.c:33
int Dim_thr_counter
Definition: dim_thr_old.c:434
void ignore_sigpipe()
Definition: dim_thr_old.c:348
void dim_unlock()
Definition: dim_thr_old.c:457
#define DllExp
Definition: dim_common.h:93
int dim_tcpip_init(int thr_flag)
Definition: tcpip.c:235
pthread_t INIT_thread
Definition: dim_thr_old.c:20
pthread_t IO_thread
Definition: dim_thr_old.c:18
void dim_no_threads()
Definition: dtq.c:80
pthread_t Dim_thr_locker
Definition: dim_thr_old.c:433
void dim_init()
Definition: dim_thr_old.c:109
void dim_signal_cond()
Definition: dim_thr_old.c:478
void dim_dtq_stop()
Definition: dtq.c:200
int DIM_THR_init_done
Definition: dim_thr_old.c:37
void pipe_sig_handler(int num)
Definition: dim_thr_old.c:383
pthread_t ALRM_thread
Definition: dim_thr_old.c:19
void * dim_dtq_thread(void *tag)
Definition: dim_thr_old.c:73
long dim_start_thread(void *(*thread_ast)(void *), long tag)
Definition: dim_thr_old.c:223
int dim_stop_thread(long t_id)
Definition: dim_thr_old.c:238
pthread_cond_t Global_cond
Definition: dim_thr_old.c:442
int dna_init()
Definition: dna.c:530
void dim_print_date_time()
Definition: utilities.c:134
pthread_mutex_t Global_DIM_mutex
Definition: dim_thr_old.c:440
pthread_mutex_t Global_cond_mutex
Definition: dim_thr_old.c:441
TT t
Definition: test_client.c:26
void dim_lock()
Definition: dim_thr_old.c:445
void tcpip_task(void *dummy)
Definition: tcpip.c:859
int dim_get_scheduler_class(int *pclass)
Definition: dim_thr_old.c:288
int dim_wait(void)
Definition: dim_thr_old.c:401
void dim_init_threads()
Definition: dim_thr_old.c:391
sem_t DIM_INIT_Sema
Definition: dim_thr_old.c:23
int dim_get_priority(int threadId, int *prio)
Definition: dim_thr_old.c:325
void * dim_tcpip_thread(void *tag)
Definition: dim_thr_old.c:39
void dim_stop_threads()
Definition: dim_thr_old.c:396