- Timestamp:
- 07/26/10 21:41:22 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/oscam.c
r2851 r2862 479 479 } 480 480 481 static void prepare_reader_restart(int ridx, int cs_idx) 482 { 483 reader[ridx].pid = 0; 484 reader[ridx].cc = NULL; 485 reader[ridx].tcp_connected = 0; 486 reader[ridx].fd=0; 487 reader[ridx].cs_idx=0; 488 reader[ridx].last_s = 0; 489 reader[ridx].last_g = 0; 490 cs_debug_mask(D_TRACE, "reader %s closed (index=%d)", reader[ridx].label, ridx); 491 if (client[cs_idx].ufd) close(client[cs_idx].ufd); 492 if (client[cs_idx].fd_m2c_c) close(client[cs_idx].fd_m2c_c); 493 memset(&client[cs_idx], 0, sizeof(struct s_client)); 494 client[cs_idx].au=(-1); 495 } 496 481 497 //Schlocke: restart cardreader after 5 seconds: 482 static void restart_cardreader(int pridx ) {498 static void restart_cardreader(int pridx, int force_now) { 483 499 ridx = pridx; 500 if (reader[ridx].cs_idx) { 501 if (reader[ridx].pid==client[reader[ridx].cs_idx].pid) { 502 int pid = reader[ridx].pid; 503 prepare_reader_restart(ridx, reader[ridx].cs_idx); 504 kill(pid, SIGKILL); 505 } 506 } 484 507 reader[ridx].ridx = ridx; //FIXME 485 508 if ((reader[ridx].device[0]) && (reader[ridx].enable == 1) && (!reader[ridx].deleted)) { … … 490 513 break; 491 514 default: 492 cs_sleepms(cfg->reader_restart_seconds * 1000); // SS: wait 515 if (!force_now) 516 cs_sleepms(cfg->reader_restart_seconds * 1000); // SS: wait 493 517 cs_log("restarting reader %s (index=%d)", reader[ridx].label, ridx); 494 518 … … 531 555 if (reader[ridx].pid == old_pid) 532 556 { 533 reader[ridx].pid = 0; 534 reader[ridx].cc = NULL; 535 reader[ridx].tcp_connected = 0; 536 reader[ridx].fd=0; 537 reader[ridx].cs_idx=0; 538 reader[ridx].last_s = 0; 539 reader[ridx].last_g = 0; 540 cs_debug_mask(D_TRACE, "%s %s closed (index=%d)", txt, reader[ridx].label, ridx); 541 //if (client[i].fd_m2c) close(client[i].fd_m2c); 542 if (client[i].ufd) close(client[i].ufd); 543 if (client[i].fd_m2c_c) close(client[i].fd_m2c_c); 544 memset(&client[i], 0, sizeof(struct s_client)); 545 client[i].au=(-1); 546 557 prepare_reader_restart(ridx, i); 547 558 cs_log("restarting %s %s in %d seconds (index=%d)", reader[ridx].label, txt, 548 559 cfg->reader_restart_seconds, ridx); … … 2735 2746 break; 2736 2747 case PIP_ID_RST: //Restart Cardreader with ridx=prt[0] 2737 restart_cardreader(*(int*)ptr );2748 restart_cardreader(*(int*)ptr, 1); 2738 2749 break; 2739 2750 case PIP_ID_KCL: //Kill all clients
Note:
See TracChangeset
for help on using the changeset viewer.