Browse Source

Z991239-342 #comment 通过 epoll 启动 bus_daemon, ioqueue

gifur 5 years ago
parent
commit
12a103187d

+ 90 - 30
libtoolkit/bus-unix.c

@@ -108,14 +108,14 @@ static SOCKET create_socket_handle(const char* ip, int port)
 
 	fd = WSASocketA(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, WSA_FLAG_OVERLAPPED);
 
-	if (fd == INVALID_SOCKET)
+	if (fd == INVALID_SOCKET) {
 		return fd;
+	}
 
 	{
 		BOOL f = TRUE;
 		u_long l = TRUE;
 		setsockopt(fd, SOL_SOCKET, SO_DONTLINGER, (char*)&f, sizeof(f));
-		//setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&f, sizeof(f));
 		_ioctlsocket(fd, FIONBIO, &l);
 	}
 
@@ -123,27 +123,28 @@ static SOCKET create_socket_handle(const char* ip, int port)
 	addr.sin_family = AF_INET;
 	addr.sin_port = htons(port);
 	addr.sin_addr.s_addr = inet_addr(ip);
-
-	if (connect(fd, (struct sockaddr*) & addr, sizeof(addr)) != 0) {
-		if (WSAGetLastError() == WSAEWOULDBLOCK) {
+	WLog_INFO(TAG, "fd(%d) start to connect...", fd);
+	if (_connect(fd, (struct sockaddr*) & addr, sizeof(addr)) != 0) {
+		if (errno == EINPROGRESS) {
+			WLog_WARN(TAG, "in connect progress...");
 			fd_set wr_set, ex_set;
 			FD_ZERO(&wr_set);
 			FD_ZERO(&ex_set);
 			FD_SET(fd, &wr_set);
 			FD_SET(fd, &ex_set);
-			if (select(fd, NULL, &wr_set, &ex_set, NULL) > 0 && FD_ISSET(fd, &wr_set))
+			if (_select(fd + 1, NULL, &wr_set, &ex_set, NULL) > 0 && FD_ISSET(fd, &wr_set)) {
 				return fd;
+			}
+		} else {
+			WLog_ERR(TAG, "_connect failed : %d", errno);
 		}
-	}
-
-	if (fd != INVALID_SOCKET)
 		closesocket(fd);
-
-	//return INVALID_SOCKET;//{bug}
+		return INVALID_SOCKET;
+	}
+	WLog_WARN(TAG, "this should be appear hardly!!!");
 	return  fd;
 }
 
-
 static int tcp_send_buf(bus_endpt_t* endpt, const char* buf, int n)
 {
 	DWORD left = n;
@@ -159,10 +160,42 @@ static int tcp_send_buf(bus_endpt_t* endpt, const char* buf, int n)
 		ResetEvent(endpt->tx_evt);
 		wsabuf.buf = (char*)buf + offset;
 		wsabuf.len = left;
-		ret = WSASend(endpt->sock_handle, &wsabuf, 1, &dwBytesTransfer, 0, &overlapped, NULL) == 0;
-		if (!ret && WSAGetLastError() == WSA_IO_PENDING) {
-			DWORD dwFlags = 0;
-			ret = WSAGetOverlappedResult(endpt->sock_handle, &overlapped, &dwBytesTransfer, TRUE, &dwFlags);
+		ret = FALSE;
+		n = _send(endpt->sock_handle, wsabuf.buf, wsabuf.len, 0);
+		if (n == -1) {
+			if (WSAGetLastError() == WSAEWOULDBLOCK) {
+				fd_set wfds;
+				struct timeval tv;
+				int retval;
+				FD_ZERO(&wfds);
+				FD_SET(endpt->sock_handle, &wfds);
+				tv.tv_sec = 5;
+				tv.tv_usec = 0;
+				retval = _select(endpt->sock_handle + 1, NULL, &wfds, NULL, &tv);
+				if (retval == -1) {
+					WLog_ERR(TAG, "select error, errno: %s", strerror(errno));
+				}
+				else if (retval && FD_ISSET(endpt->sock_handle, &wfds) > 0) {
+					WLog_INFO(TAG, "can write");
+					n = _send(endpt->sock_handle, wsabuf.buf, wsabuf.len, 0);
+					if (n >= 0) {
+						ret = TRUE;
+						dwBytesTransfer = n;
+					}
+				}
+				else {
+					WLog_WARN(TAG, "write timeout");
+					ret = TRUE;
+					dwBytesTransfer = 0;
+				}
+			}
+			else {
+				WLog_ERR(TAG, "_send failed: %s", strerror(errno));
+			}
+		}
+		else {
+			ret = TRUE;
+			dwBytesTransfer = n;
 		}
 		if (ret && dwBytesTransfer) {
 			offset += dwBytesTransfer;
@@ -172,9 +205,7 @@ static int tcp_send_buf(bus_endpt_t* endpt, const char* buf, int n)
 			return -1;
 		}
 	}
-
 	return 0;
-
 }
 
 static int pipe_send_buf(bus_endpt_t* endpt, const char* buf, int n)
@@ -273,15 +304,46 @@ static int tcp_recv_buf(bus_endpt_t* endpt, char* buf, DWORD n)
 		wsabuf.buf = buf + offset;
 		wsabuf.len = left;
 		ResetEvent(overlapped.hEvent);
-		ret = WSARecv(endpt->sock_handle, &wsabuf, 1, &dwBytesTransfer, &dwFlags, &overlapped, NULL) == 0;
-		if (!ret && WSAGetLastError() == WSA_IO_PENDING) {
-			ret = WSAGetOverlappedResult(endpt->sock_handle, &overlapped, &dwBytesTransfer, TRUE, &dwFlags);
+		ret = FALSE;
+		n = _recv(endpt->sock_handle, wsabuf.buf, wsabuf.len, 0);
+		if (n == -1) {
+			if (WSAGetLastError() == WSAEWOULDBLOCK) {
+				fd_set rfds;
+				struct timeval tv;
+				int retval;
+				FD_ZERO(&rfds);
+				FD_SET(endpt->sock_handle, &rfds);
+				tv.tv_sec = 5;
+				tv.tv_usec = 0;
+				retval = _select(endpt->sock_handle + 1, &rfds, NULL, NULL, &tv);
+				if (retval == -1) {
+					WLog_ERR(TAG, "select failed: %s", strerror(errno));
+				}
+				else if (retval && FD_ISSET(endpt->sock_handle, &rfds) > 0) {
+					WLog_INFO(TAG, "can read");
+					n = _recv(endpt->sock_handle, wsabuf.buf, wsabuf.len, 0);
+					if (n >= 0) {
+						ret = TRUE;
+						dwBytesTransfer = n;
+					}
+				}
+				else {
+					WLog_WARN(TAG, "read timeout: %d, left: %d", retval, left);
+					ret = TRUE;
+					dwBytesTransfer = 0;
+				}
+			}
+		}
+		else {
+			ret = TRUE;
+			dwBytesTransfer = n;
 		}
+
 		if (ret && dwBytesTransfer) {
 			offset += dwBytesTransfer;
 			left -= dwBytesTransfer;
 		}
-		else {
+		else if (!ret) {
 			return -1;
 		}
 	}
@@ -331,6 +393,7 @@ static int start_read_pkt(bus_endpt_t* endpt, iobuffer_t** p_pkt)
 	iobuffer_t* pkt = NULL;
 
 	*p_pkt = NULL;
+	WLog_DBG(TAG, "==> start_read_pkt");
 
 	ResetEvent(endpt->rx_evt);
 	memset(&endpt->rx_overlapped, 0, sizeof(OVERLAPPED));
@@ -344,17 +407,11 @@ static int start_read_pkt(bus_endpt_t* endpt, iobuffer_t** p_pkt)
 			&endpt->rx_overlapped);
 	}
 	else if (endpt->type == TYPE_TCP) {
-		DWORD dwFlags = 0;
 		WSABUF wsabuf;
 		wsabuf.buf = (char*)&endpt->rx_pending_pkt_len;
 		wsabuf.len = 4;
-		ret = WSARecv(endpt->sock_handle,
-			&wsabuf,
-			1,
-			&dwBytesTransferred,
-			&dwFlags,
-			&endpt->rx_overlapped,
-			NULL) == 0;
+		ret = _recv(endpt->sock_handle, wsabuf.buf, wsabuf.len, 0);
+		//TODO:
 	}
 	else {
 		return -1;
@@ -500,10 +557,13 @@ TOOLKIT_API int bus_endpt_create(const char* url, int epid, const bus_endpt_call
 	iobuffer_write(buf, IOBUF_T_I4, &v, 0);
 	v = endpt->epid;
 	iobuffer_write(buf, IOBUF_T_I4, &v, 0);
+	WLog_DBG(TAG, "start to send_pkt_raw");
 	rc = send_pkt_raw(endpt, buf);
+	WLog_INFO(TAG, "send_pkt_raw return %d", rc);
 	if (rc != 0)
 		goto on_error;
 	rc = recv_pkt_raw(endpt, &ans_buf);
+	WLog_INFO(TAG, "recv_pkt_raw return %d", rc);
 	if (rc != 0) {
 		DWORD dwError = GetLastError();
 		goto on_error;

+ 5 - 1
libtoolkit/bus_daemon-unix.c

@@ -20,7 +20,7 @@
 #define TAG TOOLKIT_TAG("bus_deamon")
 
 #define MAX_THREADS					            32
-#define DEFAULT_ACCEPT_OP_COUNT		5
+#define DEFAULT_ACCEPT_OP_COUNT		1/*5*/
 #define MSG_REMOVE_REGISTAR			    1
 
 typedef struct endpt_session_t  endpt_session_t;
@@ -813,6 +813,7 @@ static int start_accept(daemon_accetpor_t *acceptor, int idx)
 		rc = ioqueue_pipe_acceptor_async_accept(&acceptor->pipe_acceptor, ov, &on_pipe_accept_callback, (void*)idx);
 	} else if (acceptor->type == TYPE_TCP) {
 		ioqueue_overlapped_t *ov = ARRAY_IDX(acceptor->arr_ov, idx, ioqueue_overlapped_t*);
+		/*register epoll read event*/
 		rc = ioqueue_acceptor_async_accept(&acceptor->tcp_acceptor, ov, &on_tcp_accept_callback, (void*)idx);
 	} else {
 		assert(0);
@@ -895,6 +896,8 @@ TOOLKIT_API int bus_daemon_create(int n_url, const char *urls[], int nthread, bu
 		GetSystemInfo(&si);
 		nthread = min(MAX_THREADS, si.dwNumberOfProcessors << 1);
 	}
+	//TODO: ÔÝÇÒÖÃΪ 1
+	nthread = 1;
 	WLog_DBG(TAG, "thread num: %d", nthread);
 	daemon = MALLOC_T(bus_daemon_t);
 	memset(daemon, 0, sizeof(bus_daemon_t));
@@ -937,6 +940,7 @@ TOOLKIT_API int bus_daemon_start(bus_daemon_t *daemon)
 		WLog_ERR(TAG, "ioqueuq create failed!");
 		return -1;
 	}
+	ioqueue_set_user_data(daemon->ioq, daemon);
 	ioqueue_msg_add_handler(daemon->ioq, MSG_REMOVE_REGISTAR, 0, &on_msg);
 	for (i = 0; i < daemon->arr_uri->nelts; ++i) {
 		char *url = ARRAY_IDX(daemon->arr_uri, i, char*);

+ 0 - 255
libtoolkit/evtpoll.cxx

@@ -153,15 +153,6 @@ static void event_epoll_interest_unlock(event_epoll_interest_t *interest)
     spinlock_leave(&interest->lock);
 }
 
-//static void __interest_destroy(event_epoll_interest_t *interest)
-//{
-//    assert(list_empty(&interest->entry_list));
-//    array_free(interest->arr_ov);
-//    free(interest);
-//}
-//
-//IMPLEMENT_REF_COUNT_MT(evtpoll_interest, event_epoll_interest_t, ref_cnt, __interest_destroy)
-
 
 static void evtpoll_interest_enqueue(event_epoll_interest_t *interest, event_epoll_interest_entry *entry, int fifo)
 {
@@ -186,219 +177,6 @@ static event_epoll_interest_entry *evtpoll_interest_dequeue(event_epoll_interest
     return interest_entry;
 }
 
-static __inline void add_interest_list(event_epoll_interest_t *interest_ctx, event_epoll_t *ep)
-{
-    spinlock_enter(&ep->interest_list_lock, -1);
-    list_add(&interest_ctx->node, &ep->interest_list);
-    spinlock_leave(&ep->interest_list_lock);
-}
-
-static __inline void del_interest_list(event_epoll_interest_t *interest_ctx, event_epoll_t *ep)
-{
-    spinlock_enter(&ep->interest_list_lock, -1);
-    list_del(&interest_ctx->node);
-    interest_ctx->node.next = interest_ctx->node.prev = NULL;
-    spinlock_leave(&ep->interest_list_lock);
-}
-
-static void event_poll_interest_free(event_epoll_interest_t* interest)
-{
-    assert(interest);
-    assert(interest->owner);
-    del_interest_list(interest, interest->owner);
-}
-
-static void event_poll_interest_clear(event_epoll_t* ep)
-{
-    struct list_head *pos;
-    struct list_head *tmp;
-    if(list_empty(&ep->interest_list))
-        return;
-    spinlock_enter(&ep->interest_list_lock, -1);
-    list_for_each_safe(pos, tmp, &ep->interest_list) {
-        event_epoll_interest_t *node = list_entry(pos, event_epoll_interest_t, node);
-        list_del(pos);
-        evtpoll_interest_destroy(node);
-    }
-    spinlock_leave(&ep->interest_list_lock);
-    return;
-}
-
-static event_epoll_interest_t* event_poll_find_interest(event_epoll_t* ep, int unique_identifier)
-{
-    struct list_head *pos;
-    struct list_head *tmp;
-    if(list_empty(&ep->interest_list))
-        return NULL;
-    list_for_each_safe(pos, tmp, &ep->interest_list) {
-        event_epoll_interest_t *node = list_entry(pos, event_epoll_interest_t, node);
-        if(node->fd == unique_identifier)
-            return node;
-    }
-    return NULL;
-}
-
-TOOLKIT_API event_epoll_t *evtpoll_create()
-{
-    event_epoll_t *evtpoll = ZALLOC_T(event_epoll_t);
-    if (!evtpoll)
-        return NULL;
-    /*since Linux 2.6.8 the argument is ignored but must be g0 for compatibility, bcz kernel would allocate space dynamically.*/
-    evtpoll->epfd = epoll_create(MAX_EPOLL_EVENT);
-    if(evtpoll->epfd == -1) {
-        WLog_ERR(TAG, "create epoll handle failed, err: %d", errno);
-        goto on_error_1;
-    }
-    evtpoll->events = 0;
-    evtpoll->interest_count = 0;
-    evtpoll->owner = NULL;
-    evtpoll->user_data = NULL;
-    spinlock_init(&evtpoll->interest_list_lock);
-    INIT_LIST_HEAD(&evtpoll->interest_list);
-
-    return evtpoll;
-
-on_error_1:
-    free(evtpoll);
-    return NULL;
-}
-
-TOOLKIT_API void evtpoll_destroy(event_epoll_t *evt_poll)
-{
-    assert(evt_poll);
-    event_poll_interest_clear(evt_poll);
-    assert(evtpoll_interest_empty(evt_poll));
-    close(evt_poll->epfd);
-    free(evt_poll);
-}
-
-TOOLKIT_API int evtpoll_interest_empty(event_epoll_t *evt_poll)
-{
-    int ret;
-    assert(evt_poll);
-    spinlock_enter(&evt_poll->interest_list_lock, -1);
-    ret = list_empty(&evt_poll->interest_list);
-    spinlock_leave(&evt_poll->interest_list_lock);
-    return ret;
-}
-
-static __inline int evtpoll_register_interest_inst(event_epoll_t* evtpoll, event_epoll_interest_t* interest)
-{
-    int ret;
-    ret = -1;
-    assert(evtpoll);
-    assert(interest);
-    event_epoll_interest_t *exist;
-    exist = event_poll_find_interest(evtpoll, interest->fd);
-    assert(!exist);
-#if 1
-    //注册后不立即进行监听
-    ret = 0;
-#else
-    ret = evtpoll_ctl(evtpoll, EV_READ_WRITE_WITH_LT_FULL, EPOLL_CTL_ADD, interest->fd, NULL);
-    if(ret)
-        return ret;
-#endif
-    add_interest_list(interest, evtpoll);
-#if 1
-    exist = event_poll_find_interest(evtpoll, interest->fd);
-    assert(exist);
-    assert(exist == interest);
-#endif
-    return ret;
-}
-
-static __inline int evtpoll_unregister_interest_inst(event_epoll_t* evtpoll, int interest_fd)
-{
-    int ret = 0;
-    event_epoll_interest_t *exist;
-    exist = event_poll_find_interest(evtpoll, interest_fd);
-    if(exist) {
-        event_poll_interest_free(exist);
-#if 1
-        exist = event_poll_find_interest(evtpoll, interest_fd);
-        assert(!exist);
-#endif
-        evtpoll_interest_destroy(exist);
-    }
-    return ret;
-}
-
-TOOLKIT_API int evtpoll_get_raw_fd(event_epoll_t *evt_poll)
-{
-    assert(evt_poll);
-    return evt_poll->epfd;
-}
-
-TOOLKIT_API int evtpoll_attach(event_epoll_t *evt_poll, int interest_fd)
-{
-    int ret = 0;
-    assert(evt_poll);
-    assert(interest_fd > 0);
-    event_epoll_interest_t *exist;
-    exist = event_poll_find_interest(evt_poll, interest_fd);
-    if(exist) {
-        return 1;
-    }
-    exist = evtpoll_interest_create(interest_fd);
-    if(!exist) {
-        return -1;
-    }
-    exist->owner = evt_poll;
-
-    ret = evtpoll_register_interest_inst(evt_poll, exist);
-    if(ret) {
-        evtpoll_interest_destroy(exist);
-    }
-    return ret;
-}
-
-TOOLKIT_API int evtpoll_detach(event_epoll_t *evt_poll, int interest_fd)
-{
-    return evtpoll_unregister_interest_inst(evt_poll, interest_fd);
-}
-
-TOOLKIT_API int evtpoll_ctl(event_epoll_t* evtpoll, int event_mask, int ctrl_mod, int fd, void* data)
-{
-    int ret;
-    struct epoll_event ee;
-    ret = -1;
-    if(evtpoll) {
-        ee.events = event_mask;
-        if(data)
-            ee.data.ptr = data;
-        else
-            ee.data.fd = fd;
-        ret = epoll_ctl(evtpoll->epfd, ctrl_mod, fd, &ee);
-        if(ret == -1) {
-            ret = errno;
-        }
-    }
-    WLog_INFO(TAG, "evtpoll_ctl: OUT:%d, IN:%d, OTHERS:0x%08X, ADD:%d, MOD:%d, fd:%d, data:0x%X ret:%d",
-              (event_mask&EPOLLOUT) > 0 ? 1:0, (event_mask&EPOLLIN) > 0 ? 1:0,
-              (event_mask & ~(EPOLLOUT | EPOLLIN)),
-              ctrl_mod == EPOLL_CTL_ADD ? 1:0, ctrl_mod == EPOLL_CTL_MOD ? 1:0, fd, data, ret);
-    return ret;
-}
-
-TOOLKIT_API int evtpoll_ctl_remove(event_epoll_t* evtpoll, int event_mask, int fd, void* data)
-{
-    int ret;
-    struct epoll_event ee;
-    if(!evtpoll)
-        return -1;
-    ee.events = event_mask;
-    if(data)
-        ee.data.ptr = data;
-    else
-        ee.data.fd = fd;
-    ret = epoll_ctl(evtpoll->epfd, EPOLL_CTL_DEL, fd, &ee);
-    if(ret == 0 || (ret == -1 && errno == ENOENT)) {
-        return 0;
-    }
-    ret = errno;
-    return ret;
-}
 
 
 static __inline int evtpoll_subscribe_read(event_epoll_t* evtpoll, event_epoll_interest_t* interest, ioqueue_overlapped_t* data)
@@ -865,39 +643,6 @@ TOOLKIT_API int evtpoll_deal(event_epoll_t *evt_poll, struct epoll_event* event,
     return ret;
 }
 
-TOOLKIT_API event_epoll_interest_t* evtpoll_interest_create(int interest_fd)
-{
-    int i;
-    event_epoll_interest_t* interest = ZALLOC_T(event_epoll_interest_t);
-    if(!interest)
-        return NULL;
-
-    interest->fd = interest_fd;
-    INIT_LIST_HEAD(&interest->entry_list);
-    spinlock_init(&interest->lock);
-    interest->entry_count = 0;
-    interest->events = 0;
-    interest->owner = NULL;
-    interest->type = 0;
-    interest->interest_entries = array_make(DEFAULT_INTEREST_OP_COUNT, sizeof(event_epoll_interest_entry*));
-    for (i = 0; i < DEFAULT_INTEREST_OP_COUNT; ++i) {
-        ARRAY_IDX(interest->interest_entries, i, event_epoll_interest_entry*)
-                = evtpoll_interest_entry_create(interest);
-    }
-    return  interest;
-}
-
-TOOLKIT_API void evtpoll_interest_destroy(event_epoll_interest_t* interest)
-{
-    int i;
-    assert(interest);
-    assert(list_empty(&interest->entry_list));
-    for (i = 0; i < interest->interest_entries->nelts; ++i)
-        destroy_interest_entry(ARRAY_IDX(interest->interest_entries, i, event_epoll_interest_entry*));
-    array_free(interest->interest_entries);
-    free(interest);
-}
-
 #endif
 
 

File diff suppressed because it is too large
+ 810 - 58
libtoolkit/ioqueue-unix.c


+ 15 - 0
libtoolkit/ioqueue-win.c

@@ -763,6 +763,21 @@ static int poll_connect_list(ioqueue_t *ioq)
 	return count;
 }
 
+TOOLKIT_API void* ioqueue_set_user_data(ioqueue_t* ioq, void* user_data)
+{
+	void* old;
+	assert(ioq);
+	old = ioq->user_data;
+	ioq->user_data = user_data;
+	return old;
+}
+
+TOOLKIT_API void* ioqueue_get_user_data(ioqueue_t* ioq)
+{
+	assert(ioq);
+	return ioq->user_data;
+}
+
 TOOLKIT_API int ioqueue_poll(ioqueue_t* q, int timeout)
 {
 	ioqueue_t *ioq = (ioqueue_t*)q;

+ 13 - 0
libtoolkit/ioqueue.h

@@ -774,6 +774,19 @@ TOOLKIT_API int ioqueue_pipe_acceptor_create_client(ioqueue_pipe_acceptor_t *acc
 TOOLKIT_API int ioqueue_pipe_acceptor_cancel(ioqueue_pipe_acceptor_t *acceptor);
 TOOLKIT_API int ioqueue_pipe_acceptor_close_pending_handle(ioqueue_pipe_acceptor_t *acceptor);
 
+
+#ifndef _WIN32
+
+TOOLKIT_API int ioqueue_interest_empty(ioqueue_t* ioq);
+//TOOLKIT_API int ioqueue_attach(ioqueue_t* ioq, int interest_fd);
+
+TOOLKIT_API int ioqueue_overlapped_get_mask(const ioqueue_overlapped_t* const io);
+TOOLKIT_API void ioqueue_overlapped_set_mask(ioqueue_overlapped_t* io, int mask_value);
+TOOLKIT_API int ioqueue_overlapped_get_type(const ioqueue_overlapped_t* const io);
+
+#endif //NOT _WIN32
+
+
 #ifdef __cplusplus
 } // extern "C" {
 #endif

+ 9 - 5
spbase/sp_btr.c

@@ -95,7 +95,6 @@ int sp_btr_write_on_start(const char *bootrec_path, sp_version_t *version, sp_bt
 	// read last line
 	nMoveLen = min(GetFileSize(hFile, NULL), MAX_LINE_CHAR-1);
 	negMoveLen = -((LONG)nMoveLen);
-	printf("movelen: %ld\n", negMoveLen);
 	if (SetFilePointer(hFile, negMoveLen, NULL, FILE_END) == INVALID_SET_FILE_POINTER)
 	{
 		sp_dbg_error("set file pos fail: %d", GetLastError());
@@ -117,11 +116,14 @@ int sp_btr_write_on_start(const char *bootrec_path, sp_version_t *version, sp_bt
 	{
 #ifdef _WIN32
 		pTemp = strstr(pStart, "\r\n");
+		if (pTemp != NULL)
+			pStart = pTemp + 2;
 #else
 		pTemp = strstr(pStart, "\n");
-#endif //_WIN32
 		if (pTemp != NULL)
-			pStart = pTemp + 2;
+			pStart = pTemp + 1;
+#endif //_WIN32
+
 	} while (pTemp != NULL);
 
 	// 20160914: 解析异常时,不退出,换行写入当前启动日志	
@@ -137,8 +139,10 @@ int sp_btr_write_on_start(const char *bootrec_path, sp_version_t *version, sp_bt
 
 		if (n != 5 && n != 10)
 		{
-			sp_dbg_error("parse boot rec fail: [%s]", pStart);
-			//return -4;
+			sp_dbg_error("parse boot rec fail: [%s](%d)", pStart, n);
+#ifndef _WIN32
+			sp_dbg_error("strerror: %s", strerror(errno));
+#endif //NOT _WIN32
 		}
 		else
 		{

+ 2 - 3
spshell/app.cpp

@@ -269,14 +269,14 @@ int app_init()
 		sp_dbg_error("create bus deamon failed!");
 		return rc;
 	}
-	rc = bus_daemon_start(g_app.bus_daemon);	//IO队列, tcp初始化
+	rc = bus_daemon_start(g_app.bus_daemon);	
 	if (rc != 0) {
 		sp_dbg_error("start bus daemon failed!");
 		return rc;
 	}
 #endif
 
-	rc = sp_iom_create(env->url, SP_SHELL_MOD_ID, &g_app.iom);	//IO manage;socket、Timer、Pipe,与实体进行消息通信
+	rc = sp_iom_create(env->url, SP_SHELL_MOD_ID, &g_app.iom);
 	if (rc != 0) {
 		sp_dbg_error("create iom failed!");
 		return rc;
@@ -392,7 +392,6 @@ int app_init()
 
 	// close spshell dbg info
 	// sp_dbg_set_output_gui(NULL);
-
 	return 0;
 }
 

+ 5 - 0
spshell/spshell.cpp

@@ -749,6 +749,11 @@ int main(int argc, char **argv)
 	_CrtSetDebugFillThreshold(0);
 #endif //_WIN32
 
+#ifndef _WIN32
+	SetEnvironmentVariableA("WLOG_APPENDER", "FILE");
+	SetEnvironmentVariableA("WLOG_FILEAPPENDER_OUTPUT_FILE_PATH", "/opt/wlog");
+#endif //NOT _WIN32
+
 	sp_dbg_init("SpShell");
 	sp_dbg_info("===================SpShell start=====================");
 		

+ 4 - 0
winpr/include/winpr/wlog.h

@@ -174,6 +174,10 @@ extern "C"
 		}                                                                                \
 	} while (0)
 
+
+//////////////////////////////////////////////////////////////////////////
+
+
 #define WLog_LVL(tag, lvl, ...) WLog_Print_tag(tag, lvl, __VA_ARGS__)
 #define WLog_VRB(tag, ...) WLog_Print_tag(tag, WLOG_TRACE, __VA_ARGS__)
 #define WLog_DBG(tag, ...) WLog_Print_tag(tag, WLOG_DEBUG, __VA_ARGS__)

+ 1 - 2
winpr/libwinpr/thread/thread.c

@@ -28,7 +28,6 @@
 #endif
 
 #include <winpr/handle.h>
-
 #include <winpr/thread.h>
 
 /**
@@ -867,7 +866,7 @@ BOOL SetThreadPriority(HANDLE hThread, int nPriority)
 		WLog_ERR(TAG, "get thread schedule param failed, err: %d", ret);
 		return FALSE;
 	}
-	printf("the thread policy: %d, priority: %d.\n", policy, param.sched_priority);
+	WLog_DBG(TAG, "the thread policy: %d, priority: %d.", policy, param.sched_priority);
 
 	/*for scheduled under one of : SCHED_OTHER, SCHED_IDLE, SCHED_BATCH
 	 *sched_priority is not used and it must be 0.

+ 2 - 0
winpr/libwinpr/utils/wlog/FileAppender.c

@@ -147,6 +147,8 @@ static BOOL WLog_FileAppender_WriteMessage(wLog* log, wLogAppender* appender, wL
 	message->PrefixString = prefix;
 	WLog_Layout_GetMessagePrefix(log, appender->Layout, message);
 	fprintf(fp, "%s%s\n", message->PrefixString, message->TextString);
+	// Debug [3/26/2020 16:43 Gifur]
+	printf("%s%s\n", message->PrefixString, message->TextString);
 	fflush(fp); /* slow! */
 	return TRUE;
 }

+ 2 - 1
winpr/libwinpr/utils/wlog/wlog.c

@@ -842,8 +842,9 @@ wLog* WLog_New(LPCSTR name, wLog* rootLogger)
 	}
 	else
 	{
+		// Change temporary. [3/26/2020 12:40 Gifur]
 		LPCSTR level = "WLOG_LEVEL";
-		log->Level = WLOG_INFO;
+		log->Level = WLOG_TRACE/*WLOG_INFO*/;
 		nSize = GetEnvironmentVariableA(level, NULL, 0);
 
 		if (nSize)

Some files were not shown because too many files changed in this diff