Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations strongm on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Unrecoverable error 650; processor stack fault 4

Status
Not open for further replies.

LeslieM

Programmer
Jul 4, 2002
9
HU
Hi, everybody!

I've one big problem under the old Netware Lite system.
This is a simple network with three workstation, without server.
My program builded with CA Clipper5.3B and CATools3.0 for the network funtions.
The program is working fine two years ago, but the users didn't use the 3rd computer, just without my program.
Now, when the third workstation working with my program, after the start, main menu, and this errormessage is coming:
Unrecoverable error 650; processor stack fault.
But if just two workstation using this program althogether,
no problem.
The computers are working with DOS 6.22 and the Netware Lite drivers, (3 x PIICeleron, 366Mhz, 32MB RAM).
What can I do with this problem? Somebody can help me?
Very-very important...
 
Do you get the processor stack fault on all computers or just the 3rd one that is normally not used?


Richard L. Hankins Jr.
Senior Programmer
Auction Services, Inc.
 
If you cant be bothered to look at the link is says:

It's a result of infinite recursion, which occurs when a function calls itself, which calls itself, which calls itself, and so on without stopping. Most often this occurs when your error handler has an error, which triggers the error handler...
 
Thanks for Your answer!

Mr. Hankins Jr.!
No, I can have message on any of the computers, during the other two are working...

Bozz!

Really, the program main menu includes one endless cycle.
You think, the problem is in the cycle?
The 'startprograms' comes from one external database.

This cycle calls the subprograms:
Code:
do while .t.
	mig := .f.
	startprg := ""
	errorblock ({ |obj| ERRORPROC(obj) })
	begin sequence
		if aktlevel < 1
			aktlevel = 1
		endif
		MENUSOR(aktlevel)
		SLINE (ASTATL[3],1)
		set cursor on
		if aktlevel = 1
			lastmenf := menf
		else
			lastsubmenf := menf
		endif
		if amenu[menf,5] > 0
			lastlevel := aktlevel
			aktlevel = amenu[menf,5]+1
			setcolor(col2)
			REST_SCR()
			REST_SCR()
			MENUSOR(aktlevel)
			if amenu[menf,5] > 0
				aktlevel = amenu[menf,5]+1
				setcolor(col2)
				REST_SCR()
				REST_SCR()
				MENUSOR(aktlevel)
			endif
		endif
		startprg := amenu[menf,3]
		if empty(amenu[menf,4])
			do &startprg
		else
			do &startprg with amenu[menf,4]
		endif
	end sequence
	errorblock ( defblock )
	do while scrn > 0
		REST_SCR()
	enddo
	if menf > len(amenu) .or. fastquit
		exit
	endif
enddo

Where is the critical point?
In the subroutine calls, or the errorhandling?
(The first program version made ten years ago, and working without problem. It works under Novell 3x, 5x, just under the Novell Netware Lite came this problem... )
Thank You very much for Your help...

LeslieM
Hungary
Ps.: Sorry for my english...
 
What you might want to do is put some flags in the program for testing purposes, then get all 3 computers up and generate the error, this will let you know at what point you are getting the error. You did declare all of the variables right? :) Richard L. Hankins Jr.
Senior Programmer
Auction Services, Inc.
 
To LeslieM:

Which one of the workstations is being used as the &quot;server&quot; for the second workstation? It sounds like the third workstation is trying to access the second workstation rather than the first W/S or &quot;server&quot;.
1) Turn on the third W/S (the one that hasn't been used for two years).
2) Turn on the first W/S and test both W/S. If the third still has the error then the first is not the server.
3) Try #2 with the second W/S.

I hope you see what I'm trying to say.

Regards,
David Tracy.
 
this sounds like there is something wrong with your main menu... what type of menu is it. i have a small dos menu written in clipper i can share with you. its linked with blinker. i have used the source code to break up my apps to avoid large &quot;do-it-all&quot; programs and have avoided that &quot;650 error&quot; in alot of cases. how large is your application. i get that error when using rtlink.

1. you may want to change your &quot;startprograms&quot; dbf file to an array data file to reduce memory. you also need to check that file for duplicate records or marked for deleted and not packed.

2. are you using the RUM command.
3. do you have any 3rd party ASM routines linked in.
4. are you using the graphics system.
5. it may be as simple as to many nested routines.

hope to here from you soon.

bobby
 
I had this exact same problem. The 650 stack error is a red herring. An error in your program is causing your custom errorsys.prg to crash. Simply link the standard errorsys.prg supplied with the software and the real error will show itself.

David.
 
bozz is right Leslie. your problem is in ERRORPROC() function.
when you call errorblock(), the error recovery system is replaced by the codeblack that you pass to it. if the codeblock has errors it call itself. and that repeat in a infinite recursive process. you can send source of
ERRORPROC() to me.I will try to help you.
one other thing. where you assign value to variable defblock. Regular way to do that is:
defblock := errorblock ({ |obj| ERRORPROC(obj) })
in forth line of your code.

babak_md1@yahoo.com
 
Thanks for Your Help!

It's possible, this errorsys() function has changed, with the hungarian messages.
This is a good idea!
I'll try the program with the original routine.

But I don't know, why working under the Novell Network 3/5x system, without problem?

The Novell Netware Lite has limited memory stack using?
Or... Something else?

Here is the errorblock definition:
Code:
public defblock := errorblock(),
.
.
.

function ERRORPROC (obj)
local lcol, lcur, key := &quot;&quot;
private xct, yct
if obj:gencode == EG_PRINT
        lcol = setcolor (col5)
        lcur = setcursor (0)
        CBOX (8,34,frm2)
        SLINE (ASTATL[13],1)
        @ yct+2,xct+2 say &quot;A nyomtatót nem tudom használni!&quot;
        @ yct+4,xct+2 say &quot; Vizsgáld meg a papír helyzetét &quot;
        @ yct+5,xct+2 say &quot;      és a kezelögombokat!      &quot;
        @ yct+7,xct+2 say &quot;          Tovább (I/N)          &quot;
        do while !( key == &quot;I&quot; .or. key == &quot;N&quot; .or. key == chr(K_ESC) )
                key = upper(chr(inkey(0)))
                if key == &quot;I&quot;
                        if !isprinter()
                                tone (440,5)
                        else
                                key = &quot;I&quot;
                        endif
                endif
        enddo
        REST_SCR()
        setcolor (lcol)
        setcursor (lcur)
        if key != &quot;I&quot;
                set filter to
                set order to
                close databases
                dbfopen()
                set print off
                break
        endif
elseif obj:gencode == EG_CREATE
ETC...
 
1.are you using a unique login name when you run your application ? it's possibe you have restricted this login name to maximom two simultaneous workstation.
2. send your function source and it's subfunctions compeletely to me so I can give you an idea.
Your problem is probobly in a networking related function. are you using a third party like netlib or novlib?
 
No, I've supervisor rights, I can work everywhere, with my login name. The problem is not here.
I don't use other 3rd party libraries, and functions, just a CA Clipper Tools 3.0C (2000 oct.) , because of the network functions.
What do You mean, wich procedure icludes wrong code?
My errorhandling, or the main menu system?
The problem is coming, if two workstation are working, and in the third computer I start one submenupoint. The main menu working yet. Not different, which is the third computer.
The submenus came from this section:

startprg := amenu[menf,3]
if empty(amenu[menf,4])
do &startprg
else
do &startprg with amenu[menf,4] //parameters
endif
.
.
because the submenus recognise the user rights, languages etc., and according to this starting some subprogram, from array.
Every subprograms are linked clipper routines, not externals.
This starter program is really not too elagant, but always working...
[wavey2]
 
1. I know you have supervisor rights. but what about the users of your application. CATools have a function for LOGIN. doesn't your application use that?. If yes with what login name? if there is such login name you must check it.
2. do a test. comment following two lines in your main menu source:
errorblock ({ |obj| ERRORPROC(obj) })
and :
errorblock ( defblock )
compile and run application and see what happens.
3. the error occurs in error handling. but it is maybe error handling thasen't have anything wrong. but it occurs because of a mistake in setings of netware like restricting a user_id simoltanous workstations.
 
The problem is always exist, with my supervisor password too.
The other users have full right for this program, and the files access.
I don't use the login functions, and similar things, because this function not full compatile with all netware version.
For example, the Novell Netware lite is too old.
I Just used file sharing, and locking functions from the 'tools' netware collections.
I don't understand, what do You mean in the second point?
My program includes this two lines. What's a different?

And all userID settings are similar with my parameters.

Do You have any idea, how can I reduce the memory stack
usage?
Thanks for Your Help!
Leslie M.
 
In second point of my previous note I meant comment that to lines of your code. like this:
// errorblock({ |obj| ERRORPROC(obj) })
and :
//errorblock ( defblock )

ok?B-)
now compile and link and run your program and see if the default error handling system reports any error. and tell me the result.
bye :->
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top