comparison libpurple/dnssrv.c @ 20635:84c80c8b0e40

Close the pipes to the dnssrv child process. Fixes #3245
author Daniel Atallah <daniel.atallah@gmail.com>
date Tue, 25 Sep 2007 04:51:04 +0000
parents 6bf32c9e15a7
children 4604cad304cb
comparison
equal deleted inserted replaced
20634:275fe4d67158 20635:84c80c8b0e40
67 GThread *resolver; 67 GThread *resolver;
68 char *query; 68 char *query;
69 char *error_message; 69 char *error_message;
70 GSList *results; 70 GSList *results;
71 #else 71 #else
72 int fd_in, fd_out;
72 pid_t pid; 73 pid_t pid;
73 #endif 74 #endif
74 }; 75 };
75 76
76 static gint 77 static gint
110 111
111 #ifdef HAVE_SIGNAL_H 112 #ifdef HAVE_SIGNAL_H
112 purple_restore_default_signal_handlers(); 113 purple_restore_default_signal_handlers();
113 #endif 114 #endif
114 115
115 if (read(in, query, 256) <= 0) 116 if (read(in, query, 256) <= 0) {
117 close(out);
118 close(in);
116 _exit(0); 119 _exit(0);
120 }
117 121
118 size = res_query( query, C_IN, T_SRV, (u_char*)&answer, sizeof( answer)); 122 size = res_query( query, C_IN, T_SRV, (u_char*)&answer, sizeof( answer));
119 123
120 qdcount = ntohs(answer.hdr.qdcount); 124 qdcount = ntohs(answer.hdr.qdcount);
121 ancount = ntohs(answer.hdr.ancount); 125 ancount = ntohs(answer.hdr.ancount);
176 { 180 {
177 write(out, ret->data, sizeof(PurpleSrvResponse)); 181 write(out, ret->data, sizeof(PurpleSrvResponse));
178 g_free(ret->data); 182 g_free(ret->data);
179 ret = g_list_remove(ret, ret->data); 183 ret = g_list_remove(ret, ret->data);
180 } 184 }
185
186 close(out);
187 close(in);
181 188
182 _exit(0); 189 _exit(0);
183 } 190 }
184 191
185 static void 192 static void
356 363
357 query_data = g_new0(PurpleSrvQueryData, 1); 364 query_data = g_new0(PurpleSrvQueryData, 1);
358 query_data->cb = cb; 365 query_data->cb = cb;
359 query_data->extradata = extradata; 366 query_data->extradata = extradata;
360 query_data->pid = pid; 367 query_data->pid = pid;
368 query_data->fd_out = out[0];
369 query_data->fd_in = in[1];
361 query_data->handle = purple_input_add(out[0], PURPLE_INPUT_READ, resolved, query_data); 370 query_data->handle = purple_input_add(out[0], PURPLE_INPUT_READ, resolved, query_data);
362 371
363 g_free(query); 372 g_free(query);
364 373
365 return query_data; 374 return query_data;
397 } 406 }
398 407
399 void 408 void
400 purple_srv_cancel(PurpleSrvQueryData *query_data) 409 purple_srv_cancel(PurpleSrvQueryData *query_data)
401 { 410 {
411 printf("purple_srv_cancel(%p)\n", query_data);
402 if (query_data->handle > 0) 412 if (query_data->handle > 0)
403 purple_input_remove(query_data->handle); 413 purple_input_remove(query_data->handle);
404 #ifdef _WIN32 414 #ifdef _WIN32
405 if (query_data->resolver != NULL) 415 if (query_data->resolver != NULL)
406 { 416 {
412 query_data->cb = NULL; 422 query_data->cb = NULL;
413 return; 423 return;
414 } 424 }
415 g_free(query_data->query); 425 g_free(query_data->query);
416 g_free(query_data->error_message); 426 g_free(query_data->error_message);
427 #else
428 close(query_data->fd_out);
429 close(query_data->fd_in);
417 #endif 430 #endif
418 g_free(query_data); 431 g_free(query_data);
419 } 432 }