Hallo Gemeinde,
ist hier jemand mit TCL unter C unterwegs?
Ich habe ein seltsames Problem: Wenn ich den TCL-Interpreter in einem
Thread erzeuge, dann frisst das Test-Programm Speicher. Wenn ich das
ganze in einem einzigen Thread mache, wird der Speicher nicht gefressen.
Folgendes minimalisierte Programm:
1 | #include <stdio.h>
|
2 | #include <tcl.h>
|
3 | #include <pthread.h>
|
4 |
|
5 | void *call_run(void *arg) {
|
6 |
|
7 | printf("Thread created\n");
|
8 |
|
9 | Tcl_Interp *interp = Tcl_CreateInterp();
|
10 | usleep(1000000);
|
11 | Tcl_DeleteInterp(interp);
|
12 |
|
13 | printf("Thread destroyed\n");
|
14 |
|
15 | return NULL;
|
16 | }
|
17 |
|
18 | int main(int argc, char *argv[]) {
|
19 |
|
20 | Tcl_FindExecutable(argv[0]);
|
21 |
|
22 | for (;;) {
|
23 |
|
24 | //(void *) call_run(NULL);
|
25 |
|
26 | pthread_t th;
|
27 | pthread_create(&th, NULL, &call_run, NULL);
|
28 | pthread_detach(th);
|
29 |
|
30 | usleep(2000000);
|
31 | }
|
32 |
|
33 | return 0;
|
34 | }
|
In dieser Form wird der Speicher gefressen, wenn ich die Zeile '(void *)
call_run(NULL);' entkommentiere und stattdessen die drei folgenden
Zeilen auskommentiere, dann wird der Speicher nicht gefressen.
Festgestellt habe ich das unter Ubuntu 16.04, TCL 8.6.1
Hat jemand eine Idee dazu?
Danke