- From: Warren Ho <warrenh@algorithmics.com>
- Date: Fri, 12 May 2000 17:44:32 -0400
- To: www-lib@w3.org
Hi,
I have a GUI app which performs a file download from some URL. I have a
C++ class which wraps some of the libwww functions to perform the actual
download.
I am able to download the file successfully on the first try, or on
subsequent tries. However, the program will eventually core in the
libwww code as followed:
Program received signal SIGSEGV, Segmentation fault.
HTTPCleanup (req=0x1175290, status=200) at HTTP.c:159
159 if (http->timer) {
Current language: auto; currently c
(gdb) bt
#0 HTTPCleanup (req=0x1175290, status=200) at HTTP.c:159
#1 0x7e15e4 in HTTPEvent (soc=0, pVoid=0x11aabd0, type=HTEvent_CLOSE)
at HTTP.c:1277
#2 0x802d24 in HTNet_kill (net=0x11782e8) at HTNet.c:989
#3 0x802de4 in HTNet_killAll () at HTNet.c:1015
#4 0x800b9c in HTLibTerminate () at HTLib.c:190
#5 0x7cc784 in HTProfile_delete () at HTProfil.c:47
#6 0x1825e4 in HRWWWTransferInterfaceImpl::cleanup (this=0x116ed78,
request=@0xefffeab4) at
../../../Interface/WWWTransferInterface.C:427
The code in my download function is:
HRError
HRWWWTransferInterfaceImpl::getFile(
const RWCString & strURL,
const RWCString & strOutputFilename,
HRProgressMonitor *pProgress /* = NULL */)
{
FILE* outputFile = NULL;
int status = 0;
// Initialisation
HTSetTraceMessageMask("sop"); // Show all traces
HTRequest * request = HTRequest_new();
HTRequest_setOutputFormat(request, DEFAULT_FORMAT);
HTRequest_setContext (request, (void*)this);
HTProfile_newNoCacheClient(APP_NAME, HISTORISK_RELEASE_STRING);
// If we crap out before calling the terminate callback with a
successful
// load, we want some sort of general failure
i_errStatus = HRERR_INIT_FAILURE;
i_pProgress = pProgress;
// Capture output and trace messages
HTPrint_setCallback(printerCB);
HTTrace_setCallback(tracerCB);
// Delete the default Username/password handler and replace it with
our own.
HTAlert_deleteOpcode(HT_A_USER_PW);
HTAlert_add(usernameAndPasswordCB, HT_A_USER_PW);
// Add default content decoder. We insert a through line as it
doesn't
// matter that we get an encoding that we don't know.
HTFormat_addCoding("*", HTIdentityCoding, HTIdentityCoding, 0.3);
HTParentAnchor * anchor = (HTParentAnchor *)
HTAnchor_findAddress(strURL);
// Delete the default progress notification handler and replace it
with our own.
HTAlert_deleteOpcode(HT_A_PROGRESS);
HTAlert_add(progressNotifyCB, HT_A_PROGRESS);
outputFile = fopen(strOutputFilename, "wb");
if (outputFile == NULL)
{
cleanup(request);
i_errStatus = HRERR_CANT_OPEN_FILE;
i_errStatus << strOutputFilename;
i_errStatus.logError();
return i_errStatus;
}
HTRequest_setOutputStream(
request,
HTFWriter_new(request, outputFile, YES));
// Set event timeout
HTHost_setEventTimeout(i_timeoutSeconds * MILLI_PER_SEC);
// Make sure that the first request is flushed immediately and not
// buffered in the output buffer
// Note (marka) I'm not sure if this is necessary, it was copied
straight
// out of the libwww example
// HTRequest_setFlush(request, YES);
// Add our own filter to update the history list
HTNet_addAfter(terminateCB, NULL, NULL, HT_ALL, HT_FILTER_LAST);
// Start the request
status = HTLoadAnchor((HTAnchor *) anchor, request);
if (status != YES)
{
cleanup(request);
i_errStatus = HRERR_WWW_NO_SERVER;
i_errStatus.logError();
return i_errStatus;
}
// Go into the event loop...
HTEventList_loop(request);
HTEventList_unregisterAll();
cleanup(request);
return i_errStatus;
}
where my terminate handler is
int
HRWWWTransferInterfaceImpl::terminateCB(
HTRequest * request,
HTResponse * response,
void * param,
int status)
{
...
HTEventList_stopLoop();
return HT_OK;
}
and the cleanup function contains
void
HRWWWTransferInterfaceImpl::cleanup(HTRequest * & request)
{
if (request != NULL)
{
HTRequest_delete(request);
request = NULL;
}
HTProfile_delete();
}
Does anyone know whether there is a bug in the library or whether I did
something wrong? I am using the wwwlib 5.2.8 source and the system is
UNIX on Solaris 2.6.
Thanks,
Warren Ho
--
Warren Ho Algorithmics Inc.
Software Engineer 185 Spadina Avenue
email: warrenh@algorithmics.com Toronto, Ontario
phone: (416)-217-4353 Canada M5T 2C6
Received on Friday, 12 May 2000 17:45:03 UTC