|
| Kernel detected unmatched call to EndSleepNotAllowed |
 |
Mon, 25 Sep 2006 09:28:32 GMT |
Hi All:
Our application cause a server abend in customer env. And from
abend.log we found that:
Abend 1 on P00: Server-5.70.02-6592: Kernel detected unmatched call to
EndSleepNotAllowed.
Registers:
CS = 0008 DS = 0068 ES = 0068 FS = 0068 GS = 007B SS = 0068
EAX = 00626240 EBX = 00626248 ECX = A1E54C91 EDX = 48CD0440
ESI = 016340A0 EDI = A1E54F08 EBP = A1E54CD4 ESP = A1E54CCC
EIP = 00000000 FLAGS = 00000246
And from this link, we found Symantec have a crash resulted from same
guilty API:
http://support.novell.com/cgi-bin/search/searchtid.cgi?/10066151.htm
Due to this document, before you call EndSleepNotAllowed, you need to
check if Server.nlm|SleepNotAllowedUseCount greater than 0. If it is, call
this function is allowed, else, it's prohibit.
I can't find useful information than this anymore. However, I can't
revise my code only according to information above mentioned, because in
my application, such check is already done, please see the below snippet:
void CloseFileCallBackExt(CloseFileCallBackStruct *cbs,int ccode)
{
if (majorServerVersion >= 4) {
if (majorServerVersion >= 6) {
if (pSystemSleepNotAllowedUseCount &&
*pSystemSleepNotAllowedUseCount > 0) {
EndSleepNotAllowed(); // novell says this is OK
bCallEndSleepNotAllowed = 1;
}
}
else {
EndSleepNotAllowed(); // novell says this is OK
bCallEndSleepNotAllowed = 1;
}
}
closeevent = &State[i].event.closeEvent;
closeevent->ConnectionNumber = cbs->connection;
closeevent->HandleNumber = cbs->fileHandle;
closeevent->Task = cbs->task;
MyCloseFileFunction(closeevent);
// if (majorServerVersion >= 4 && majorServerVersion < 6)
// {
if (bCallEndSleepNotAllowed) {
StartSleepNotAllowed();
bCallEndSleepNotAllowed = 0;
}
//}
These codes not written by me, but sustained by me. So I don't know
why we need to call API EndSleepNotAllowed here, and but only when OS
version is greater than 4. More strangely, it't different between netware
5 and netware 6.
Could anybody help me on these questions:
1. Why need we call EndSleepNotAllowed/StartSleepNotAllowed pair? If
we don't call it anyway, what'll happend?
2. Why the behaviour depends on different OS version?
3. Will a call to EndSleepNotAllowed change the value of
Server.nlm|SleepNotAllowedUseCount? If so, in multiple thread, need we add
thread mutually exclusive logic here?
4.Customer's OS is:
NetWare 5.70.02 11 June 2004
But I found that Netware 6:
NetWare 5.60 September 13, 2001
If in customer's env, the OS is originally netware5, but patched to
5.70, what happend? Should be treated as netware 5 or netware 6?
Thousands thanks!
|
| Post Reply
|
| Re: Kernel detected unmatched call to EndSleepNotAllowed |
 |
Wed, 27 Sep 2006 03:26:15 GMT |
aaron_yang wrote:
Could anybody help? Now I find it's not a OS version problem,
customer's OS is NW65 sp2, it should be 5.7
But I still need to know:
1. Why a call to EndSleepNotAllowed/StartSleepNotAllowed is
needed? What'll happen if we don't call?
2. Netware 6 is non-preemptive, so no mutex is need between thread, is
that right?
|
| Post Reply
|
| Re: Kernel detected unmatched call to EndSleepNotAllowed |
 |
Sun, 22 Oct 2006 03:21:21 GMT |
You would get a better response by posting to either the libc or clib
newsgroup ...
--
Peter
|
| Post Reply
|
|
|
|
|
|
|
|
|
|