Pliant talk forum

Pliant talk forum

Bug report: persistence problem

A minor modification in a .page may need the
server to be restarted
Message posted by pom on 2004/06/14 21:41:59
In use a .page callings methods with level 2 buttons.
If I had a "header" instruction in the .page (or somehow anything),
after having reloaded the page,
the level 1 buttons still work, but an attempt to use level 2 ones
result in the message
The button you selected vanished on the server, probably due to just applied update

After a server restart, a reload of the level 2 button page (directly!) works,
what means that the identifiers have not changed!...
Message posted by pom on 2004/06/14 22:15:04
The problem seems to be the following:
the module associated with the button is a .style (that did not change
in the experiment).
However, the http_record_dynamic_page records http_current_filename
as the reference file for it. As a consequence, if the .page is
modified, find_dynamic_page will consider the button subpage as
obsolete and delete the subpage.
Message posted by pom on 2004/06/14 22:44:00
Although not very nice, the following patch seems to work:

in /pliant/protocol/http/server.pli:

function http_record_dynamic_page filename position function type
 ...

->

function http_record_dynamic_page physicalname physicaldate filename position function type
  arg Str physicalname filename position ; arg DateTime physicaldate; arg Function function ; arg Type type
  ...
  dp filename := physicalname
  ...
  dp datetime := physicaldate
  ...

function http_record_dynamic_page filename position function type
  arg Str filename position ; arg Function function ; arg Type type
  http_record_dynamic_page http_current_filename http_current_datetime filename position function type

in /pliant/protocol/http/style/common.pli

function button_expression e options button_id ctx -> ok
  ...
  http_record_dynamic_page button_id e:position sub_function type
  ...
->

function button_expression e options button_id ctx -> ok
  ...
  var Str physname := replace (replace e:module:name " (internals)" "") ".html" ".page"
  var DateTime physdat := (file_query physname standard) datetime
  http_record_dynamic_page physname physdat button_id e:position sub_function type
  ...