Fix for out of stack space on large music libraries

This commit is contained in:
Ron Pedde 2004-04-22 04:20:30 +00:00
parent 2dee0cebd4
commit 8ef12d52f6
2 changed files with 38 additions and 34 deletions

@ -239,33 +239,31 @@ DAAP_BLOCK *daap_add_empty(DAAP_BLOCK *parent, char *tag) {
int daap_serialize(DAAP_BLOCK *root, int fd, int gzip) { int daap_serialize(DAAP_BLOCK *root, int fd, int gzip) {
char size[4]; char size[4];
if(!root) while(root) {
return 0; r_write(fd,root->tag,4);
size[0] = (root->reported_size >> 24) & 0xFF;
size[1] = (root->reported_size >> 16) & 0xFF;
size[2] = (root->reported_size >> 8 ) & 0xFF;
size[3] = (root->reported_size) & 0xFF;
r_write(fd,&size,4);
if(root->size) {
if(root->free)
r_write(fd,root->value,root->size);
else
r_write(fd,root->svalue,root->size);
}
r_write(fd,root->tag,4); if(root->children) {
if(daap_serialize(root->children,fd,gzip))
return -1;
}
size[0] = (root->reported_size >> 24) & 0xFF; root=root->next;
size[1] = (root->reported_size >> 16) & 0xFF;
size[2] = (root->reported_size >> 8 ) & 0xFF;
size[3] = (root->reported_size) & 0xFF;
r_write(fd,&size,4);
if(root->size) {
if(root->free)
r_write(fd,root->value,root->size);
else
r_write(fd,root->svalue,root->size);
} }
if(root->children) {
if(daap_serialize(root->children,fd,gzip))
return -1;
}
if(daap_serialize(root->next,fd,gzip))
return -1;
return 0; return 0;
} }
@ -275,17 +273,20 @@ int daap_serialize(DAAP_BLOCK *root, int fd, int gzip) {
* Free an entire daap formatted block * Free an entire daap formatted block
*/ */
void daap_free(DAAP_BLOCK *root) { void daap_free(DAAP_BLOCK *root) {
if(!root) DAAP_BLOCK *pnext;
return;
DPRINTF(ERR_DEBUG,"Freeing %c%c%c%c\n",root->tag[0],root->tag[1], while(root) {
root->tag[2],root->tag[3]); DPRINTF(ERR_DEBUG,"Freeing %c%c%c%c\n",root->tag[0],root->tag[1],
root->tag[2],root->tag[3]);
if((root->size) && (root->free)) if((root->size) && (root->free))
free(root->value); /* otherwise, static value */ free(root->value); /* otherwise, static value */
daap_free(root->children); daap_free(root->children);
daap_free(root->next);
free(root); pnext=root->next;
free(root);
root=pnext;
}
return; return;
} }

@ -457,7 +457,7 @@ void *signal_handler(void *arg) {
/* process the signal */ /* process the signal */
switch(sig) { switch(sig) {
case SIGINT: case SIGINT:
DPRINTF(ERR_LOG,"Got INT signal. Notifying daap server.\n"); DPRINTF(ERR_LOG,"Got INT signal. Notifying daap server.\n");
config.stop=1; config.stop=1;
return NULL; return NULL;
break; break;
@ -465,6 +465,9 @@ void *signal_handler(void *arg) {
DPRINTF(ERR_LOG,"Got HUP signal. Notifying daap server.\n"); DPRINTF(ERR_LOG,"Got HUP signal. Notifying daap server.\n");
config.reload=1; config.reload=1;
break; break;
default:
DPRINTF(ERR_LOG,"What am I doing here?\n");
break;
} }
} }
} }
@ -649,7 +652,7 @@ int main(int argc, char *argv[]) {
config.reload=0; config.reload=0;
DPRINTF(ERR_LOG,"Reloading configuration\n"); DPRINTF(ERR_LOG,"Reloading configuration\n");
} }
sleep(10); sleep(2);
} }
DPRINTF(ERR_LOG,"Stopping gracefully\n"); DPRINTF(ERR_LOG,"Stopping gracefully\n");