See additional note below ********
Craig Allan Jeffree wrote:
>
> Hello all,
> I have the following function in a virtual driver:
>
> static Err responseNotification(SysNotifyParamType *notifyParamsP)
> {
> Err err;
> static UInt16 count = 0;
>
> notificationBufferP data =
> (notificationBufferP)(notifyParamsP->notifyDetailsP);
>
> if (notifyParamsP->notifyType == kDrvrCreatorType &&
> notifyParamsP->broadcaster == kDrvrCreatorType)
> {
> LOG_PRINTF_F((data->globals->logInfoP, " Sending: (%u)\n",
> data->bufSize));
> LOG_DUMPASC_DS((data->globals->logInfoP, (UInt8*) data->buf,
> data->bufSize));
> SrmSend(data->globals->portRef, (void *)data->buf,
> (UInt32)data->bufSize, &err);
> MemPtrFree(data->buf);
>
> ((SysNotifyParamType *)notifyParamsP)->handled = true;
>
> LOG_PRINTF_F((data->globals->logInfoP, "Count = %u\n", count));
>
> if (count < 3)
> {
> // Reprime the wake up handler
> LOG_PRINTF_F((data->globals->logInfoP, " repriming wakeup
> handler\n"));
> err = SrmPrimeWakeupHandler(data->globals->portRef, 1);
>
> count++;
> }
>
> }
> return 0;
> }
>
> The function is used to respond to a notification broadcast sent by
> another part of my code. The problem is that the function works fine
> and all the variables check out in the network connection dialog box -
> but when I go to an application that uses the serial manager the
> function crashes. Does this occure because the code has been moved and
> the pointer has become invalid?
>
> To help me figure this out I added the count variable so that it would
> only get triggered the first time in the application (it gets triggered
> twice immediately after connection). The problem is that the count
> variable gets logged as having strange random values in the thousands
> and the if (count < 3) never gets entered. The only way I can see this
> happening is if the stack has been totally screwed by a mismatch in the
> amount of data pushed on compared to the amount expected to be there.
> I'm guessing that the screwy stack could cause the count variable to be
> refered to wrong - but then that would only mean the wrong place in
> memory would be set to zero and then seen as zero . . . anyway back to
> my point...
>
********
If I declare the count variable as non-static it will work - but of
course it doesn't hold the value between calls. Are static variables
unavailable to virtual drivers - or callbacks in general?
> What could possibly be going wrong to cause this to happen?
>
> Thanks in advance,
> Craig.
>
> --
> Craig Jeffree [EMAIL PROTECTED]
> dotWAP.com Inc. http://www.dotwap.com/
> Melbourne, Australia
>
> --
> For information on using the Palm Developer Forums, or to unsubscribe, please see
>http://www.palmos.com/dev/tech/support/forums/
--
Craig Jeffree [EMAIL PROTECTED]
dotWAP.com Inc. http://www.dotwap.com/
Melbourne, Australia
--
For information on using the Palm Developer Forums, or to unsubscribe, please see
http://www.palmos.com/dev/tech/support/forums/