Changeset 101 in Main for trunk


Ignore:
Timestamp:
Sep 19, 2024, 11:45:27 PM (2 months ago)
Author:
Nishi
Message:

fix select

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Server/server.c

    r100 r101  
    750750#endif
    751751
    752 #ifdef __MINGW32__
     752#if defined(__MINGW32__) || defined(__HAIKU__)
    753753struct thread_entry {
     754#ifdef __HAIKU__
     755        thread_id thread;
     756#else
    754757        HANDLE handle;
     758#endif
    755759        bool used;
    756760};
     
    760764        struct timeval tv;
    761765        int i;
    762 #ifdef __MINGW32__
     766#if defined(__MINGW32__) || defined(__HAIKU__)
    763767        struct thread_entry threads[2048];
    764768        for(i = 0; i < sizeof(threads) / sizeof(threads[0]); i++) {
     
    784788                        break;
    785789                } else if(ret == 0) {
    786 #ifdef __MINGW32__
    787                         for(i = 0; i < sizeof(threads) / sizeof(threads[0]); i++) {
    788                                 if(threads[i].used) {
    789                                         DWORD ex;
    790                                         GetExitCodeThread(threads[i].handle, &ex);
    791                                         if(ex != STILL_ACTIVE) {
    792                                                 CloseHandle(threads[i].handle);
    793                                                 threads[i].used = false;
    794                                         }
    795                                 }
    796                         }
    797 #endif
    798790#ifdef SERVICE
    799791                        if(status.dwCurrentState == SERVICE_STOP_PENDING) {
     
    837829                                        }
    838830#elif defined(__HAIKU__)
    839                                         thread_id thr = spawn_thread(tw_server_pass, "Tewi HTTPd", 60, e);
    840                                         resume_thread(thr);
     831                                        for(j = 0; j < sizeof(threads) / sizeof(threads[0]); j++) {
     832                                                if(threads[j].used) {
     833                                                        thread_info info;
     834                                                        bool kill = false;
     835                                                        if(get_thread_info(threads[j].thread, &info) == B_OK){
     836                                                        }else{
     837                                                                kill = true;
     838                                                        }
     839                                                        if(kill){
     840                                                                printf("Kill thread %d\n", threads[j].thread);
     841                                                                threads[j].used = false;
     842                                                        }
     843                                                }
     844                                        }
     845                                        for(j = 0; j < sizeof(threads) / sizeof(threads[0]); j++) {
     846                                                if(!threads[j].used) {
     847                                                        threads[j].thread = spawn_thread(tw_server_pass, "Tewi HTTPd", 60, e);
     848                                                        threads[j].used = true;
     849                                                        resume_thread(threads[j].thread);
     850                                                        break;
     851                                                }
     852                                        }
    841853#else
    842854                                        pid_t pid = fork();
Note: See TracChangeset for help on using the changeset viewer.