|
From: <mla...@us...> - 2006-11-16 02:47:58
|
Revision: 152
http://svn.sourceforge.net/g15daemon/?rev=152&view=rev
Author: mlampard
Date: 2006-11-15 18:47:57 -0800 (Wed, 15 Nov 2006)
Log Message:
-----------
fix several silly bugs in g15_send() preventing it from returning if connection is lost for some reason. Add reconnect ability to xmms plugin.
Modified Paths:
--------------
trunk/g15daemon-wip/g15daemon_xmms/g15daemon_xmms_spectrum.c
trunk/g15daemon-wip/libg15daemon_client/g15daemon_net.c
Modified: trunk/g15daemon-wip/g15daemon_xmms/g15daemon_xmms_spectrum.c
===================================================================
--- trunk/g15daemon-wip/g15daemon_xmms/g15daemon_xmms_spectrum.c 2006-11-16 01:31:32 UTC (rev 151)
+++ trunk/g15daemon-wip/g15daemon_xmms/g15daemon_xmms_spectrum.c 2006-11-16 02:47:57 UTC (rev 152)
@@ -141,7 +141,12 @@
else
g15r_renderString (canvas, (unsigned char *)"Playlist Empty", 0, G15_TEXT_LARGE, 24, 16);
- g15_send(g15screen_fd,(char *)canvas->buffer,G15_BUFFER_LEN);
+ if(g15_send(g15screen_fd,(char *)canvas->buffer,G15_BUFFER_LEN)<0) {
+ /* connection error occurred - try to reconnect to the daemon */
+ while((g15screen_fd=new_g15_screen(G15_G15RBUF))<0 && !leaving){
+ xmms_usleep(150000);
+ }
+ }
pthread_mutex_unlock(&g15buf_mutex);
xmms_usleep(25000);
}
Modified: trunk/g15daemon-wip/libg15daemon_client/g15daemon_net.c
===================================================================
--- trunk/g15daemon-wip/libg15daemon_client/g15daemon_net.c 2006-11-16 01:31:32 UTC (rev 151)
+++ trunk/g15daemon-wip/libg15daemon_client/g15daemon_net.c 2006-11-16 02:47:57 UTC (rev 152)
@@ -31,6 +31,9 @@
#include <poll.h>
#include <arpa/inet.h>
#include <unistd.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
#include <config.h>
#include <libg15.h>
@@ -66,7 +69,10 @@
return -1;
setsockopt(g15screen_fd, SOL_SOCKET, SO_PRIORITY, &tos, sizeof(tos));
-
+
+ if (fcntl(g15screen_fd, F_SETFL, O_NONBLOCK) <0 ) {
+ }
+
memset(buffer,0,256);
if(g15_recv(g15screen_fd, buffer, 16)<0)
return -1;
@@ -101,16 +107,20 @@
while(total < len && !leaving) {
memset(pfd,0,sizeof(pfd));
pfd[0].fd = sock;
- pfd[0].events = POLLOUT;
- if(poll(pfd,1,500)>0) {
- if(pfd[0].revents & POLLOUT) {
- retval = send(sock, buf+total, bytesleft, 0);
+ pfd[0].events = POLLOUT|POLLERR|POLLHUP|POLLNVAL;
+ if(poll(pfd,1,500)>=0) {
+ if(pfd[0].revents & POLLOUT && !(pfd[0].revents & POLLERR || pfd[0].revents & POLLHUP || pfd[0].revents & POLLNVAL) ) {
+ retval = send(sock, buf+total, bytesleft, MSG_DONTWAIT);
if (retval == -1) {
break;
}
bytesleft -= retval;
total += retval;
}
+ if((pfd[0].revents & POLLERR|| pfd[0].revents & POLLHUP || pfd[0].revents & POLLNVAL)){
+ retval=-1;
+ break;
+ }
}
}
return retval==-1?-1:0;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|