1. Javier García
  2. PowerBuilder
  3. Wednesday, 26 August 2020 07:56 AM UTC

Hello:

We have a problem with an application (named GPS) since the migration from PB12.6 to PB2019 R2
In a concrete scenario, the app crashes with the following message:


GPS.exe has stopped working

In the details of the message:
Problem Event Name: APPCRASH
Application Name: gps.exe
Fault Module Name: PBSHR190.DLL
Fault Module Version: 19.1.0.2328


I have tried to reproduce the error in the IDE environment and it also fails (in this case the IDE directly closes)

The situation that provokes the error is the following:

There is a loop where a window named 'w_pr_tickets' is opened several times, depending of a condition:

For i=1 TO dw_1.RowCount()
  IF condition THEN
    OpenWithParm(w_pr_tickets, PARAMS)
  END IF
NEXT

The error arises in the Close event of the window 'w_pr_ticket' after several iterations. It's randomly when it crashes, sometime after 2 loops, other times after 6 or 7 loops, but always ends crashing. Not always with the same data set, we have completely discarded is an issue with an specific data. It crashes in production environment, but also in development environment and in test environment, no matter the data set.

I have verified that the CLOSE sentence is the last in the script. As I read that when Closing the window in an event of the same window, the CLOSE sentence must be the last in the script.

Also I have enable the DEBUG mode to obtain more information about when the error ocurs, and found the following:

In a normal execution of the CLOSE event, the debug file looks like that:

End event +CLOSE for class W_PR_TICKETS, lib entry W_PR_TICKETS

Executing object function +DESTROY for class DWOBJECT, lib entry _TYPEDEF
Executing instruction at line 2586
Executing object function __DESTROY_OBJECT for class DWOBJECT, lib entry _TYPEDEF
Executing system dll function
End class function __DESTROY_OBJECT for class DWOBJECT, lib entry _TYPEDEF
Executing instruction at line 2587
End class function +DESTROY for class DWOBJECT, lib entry _TYPEDEF

This group of sentences repeats several times. Then comes the destroy for the objects in the window:

Executing object function +DESTROY for class W_PR_TICKETS, lib entry W_PR_TICKETS
Executing instruction at line 2
Executing object function +DESTROY for class ST_7, lib entry W_PR_TICKETS
End object function +DESTROY for class ST_7, lib entry W_PR_TICKETS
Executing instruction at line 3
Executing object function +DESTROY for class ST_RELACION, lib entry W_PR_TICKETS
End object function +DESTROY for class ST_RELACION, lib entry W_PR_TICKETS

this repeats for all the objects in the window.

However, when the application fails, the last entry in the debug file is the following:

End event +CLOSE for class W_PR_TICKETS, lib entry W_PR_TICKETS

And there is no ocurrence for the destroy instructions that appears after a succesful close, so I guess is here where the app fails.

I have googled to find any solution, but cant find any relevant:

I have already checked that the datastores used in the window are explicity destroyed.


I have include the GarbageCollect both at the Close Event in the window 'w_pr_tickets' and in the main loop where the window is opened, but the error persist.


I have tried the 2328 and 2353 PB2019 R2 versions, but the error triggers with both versions.

As aditional information, we are using an Oracle database. I read something about problems when calling Stored Procedures, but this is not our case. Not CURSOR or stored procedure is used in the window.

The application comes from PB12.6 where it was working without this issue. So we assume that the problem comes from the PB2019 R2 version.

Any help will be much appreciated as we are stuck with this issue and affecting production systems.

Regards

Javier

Ricardo Jasso Accepted Answer Pending Moderation
  1. Wednesday, 26 August 2020 22:21 PM UTC
  2. PowerBuilder
  3. # 1

Javier,

I you want to open multiple instances of a window you should use a local window array instead of the global window variable.


Long i, j
w_pr_tickets w_to_open[]

j = 0
For i = 1 to dw_1.RowCount()
If condition Then
j = j + 1
OpenWithParm(w_to_open[j], Params)
End If
Next

And make sure the window's scripts never reference the global window variable. For example,

instead of

  Close(w_pr_tickets)

use

  Close(parent)

Maybe this is what is causing the error.

Regards,

Ricardo

 

 

Comment
  1. Ricardo Jasso
  2. Wednesday, 26 August 2020 23:31 PM UTC
Unless the window is of type response! in which case your code should work as is.
  1. Helpful
  1. Javier García
  2. Thursday, 27 August 2020 06:11 AM UTC
Thanks for your suggestion Ricardo.

I will try the solution that you suggest, but I forgot to mention that the window 'w_pr_tickets' is response! type, so until it is not completely closed the next instance is not open
  1. Helpful
  1. Ricardo Jasso
  2. Thursday, 27 August 2020 14:41 PM UTC
Javier, are you issuing the Close function in the Close event? I wouldn't recommend that as the Close function will trigger the Close event which will then execute the Close function again. The Close function also triggers the CloseQuery event so there should be no calls to the Close function neither there.



If that is not the case, then I'd suggest you execute a Sleep function with one or two seconds (or more) as the last line before returning control back to the calling loop. Maybe that'll give time to properly destroy all objects before opening the window again.
  1. Helpful
There are no comments made yet.
Chris Pollach @Appeon Accepted Answer Pending Moderation
  1. Wednesday, 26 August 2020 15:03 PM UTC
  2. PowerBuilder
  3. # 2

Hi Javier;

   Sounds like you have done alot to try & diagnose your issue. I would now suggest opening a Support Ticket for this problem. Especially, if you can create a reproducible test case.

Regards ... Chris

Comment
  1. Javier García
  2. Wednesday, 26 August 2020 15:10 PM UTC
Thanks Chris, I'll do.

Yes, we have been struggling with this before posting the problem.



  1. Helpful
There are no comments made yet.
  • Page :
  • 1


There are no replies made for this question yet.
However, you are not allowed to reply to this question.