void terminate_all()
{
int i;
- terminate_all_target();
samplingStop();
+ terminate_all_target();
// wait for all other thread exit
for(i = 0; i < MAX_TARGET_COUNT; i++)
LOGI("target close, socket(%d), pid(%d) : (remaining %d target)\n",
manager.target[index].socket, manager.target[index].pid, manager.target_count - 1);
- terminate_target(index);
epoll_ctl(epollfd, EPOLL_CTL_DEL, manager.target[index].event_fd, NULL);
setEmptyTargetSlot(index);
if (0 == __sync_sub_and_fetch(&manager.target_count, 1)) // all target client are closed
{
manager.host.data_socket = csocket;
LOGI("host data socket connected = %d\n", csocket);
- if (start_transfer() != 0) {
- LOGE("Cannot start transfer\n");
- return -1;
- }
}
hostserverorder++;
if(-11 == targetEventHandler(efd, k, u))
{
LOGI("all target process is closed\n");
- terminate_all();
- ret = 0;
- goto END_EFD;
+ continue;
}
}
break;
{
// close target and host socket and quit
LOGI("host close = %d\n", manager.host.control_socket);
- terminate_all();
ret = 0;
goto END_EFD;
}
int start_transfer()
{
- if (manager.transfer_thread != -1) // already started
+ int saved_flags;
+
+ if (manager.transfer_thread != -1) { // already started
+ LOGI("KAIN: transfer already running\n");
return 1;
+ }
+
+ saved_flags = fcntl(manager.buf_fd, F_GETFL);
+ fcntl(manager.buf_fd, F_SETFL, saved_flags & ~O_NONBLOCK);
if(pthread_create(&(manager.transfer_thread),
NULL,