Ok, I removed the code from the official code now.
A bit background: The "autosave" mechanism in elog saves regularly the current content in a "draft" message, so that the data does not get lost if the browser for example crashes. The saving is done asynchronously via some AJAX call. This call takes some time, since it's a round-trip to the elogd server. If the user hist "submit" during such a save, the second save might be issue before the first one has been finsihed. That's why I had a "while (in_asend)" in the code, where in_asend gets set to true when the AJAX call is started and false when it completes. Now JavaScript is not really multi-threading, so having a loop "while (in_asend)" can actually prevent the AJAX request to complete. This might have been different when I implemented that feature, which is the reason that it worked before. Without that code, it can now happen that a second HTTTP POST is sent before the first request finishes, but I guess this should not be a problem, since both requests come sequentially to the elogd server and are executed one after the other. So in worst case the elog entry text is just saved twice.
Michael Kelsey wrote: |
Thank you for your suggestion, Stefan! The sysadmin who handles our e-Log server implemented your suggestion earlier today (Saturday). I have been able to successfully create and modify e-Log entries with Safari since then. Since the "slow script" issue has been intermittent in the past, I plan to continue testing and monitoring for the next day or so. Nevertheless, it appears that removing the waiting loop has alleviated my problem.
-- Mike Kelsey
Followup Sunday 15 Apr (U.S. Pacifiic time): I think your suggestion has solved my problem. I've been able to create and modify e-Log entries through our server multiple times over the weekend. There have been no hangs, timeouts, or lost content. Thank you very much for your response!
Stefan Ritt wrote: |
I'm not 100% sure, but I believe it should work without the
while (in_asend);
So can you please remove that line (it's in src/elogd.c) and recompile elogd and test it?
Stefan
Michael Hibbard wrote: |
I dont' have a solution, but I just wanted to bring more attention to your post. I too am having the same issue with the ELOG system and the Safari browser. I have noticed that ELOG is most stabel and function on the client end from the IE browser. A few weeks ago I also had to switch from using ELOG on the client end from Safari to Firefox.
Michael Kelsey wrote: |
Hello! The CDMS collaboration is using e-Log as one of it's issue tracking systems. In the last few months, I have noticed a problem when either creating or editing entries from my usual Safari browser (currently 11.1 on MacOSX 10.13.4): The [Submit] button triggers a spinning beach ball, with no connection to our e-Log server, and after several minutes, Safari complains the the page had to be reloaded, discarding all of my edits, uploads, whatever. This used to be occasional, but in the past month it has become routine, such that the only way I can edit or create entries is by launching a different browser entirely (Firefox), just for e-Log editing.
Now, I am also seeing the same problems with Firefox, but at the "occasional" level. The difference is that Firefox produces some diagnostic information, which is why I'm posting here. When the browser hangs, after a short while Firefox produces a "Warning: unresponsive script" drop-down box:
Warning: unresponsive script
A script on this page may be busy, or it may have stopped responding. You can stop the script now, open the script in the debugger, or let the script continue.
Script: http://titus.stanford.edu/cdms…/SuperSim/681?cmd=Edit&steal=1:30
[] Don't ask me again
[Debug script] [Stop script] [Continue]
If I use the [Debug script] button, the call stack shows "onclick 681:1" -> "chkform 681:30", and the line-by-line traceback shows the chkform function:
16 var in_asend = false;
17
18 function chkform()
19 {
20 if (last_key == 13) {
21 var ret = confirm('Really submit this entry?');
22 if (!ret) {
23 last_key = 0;
24 return false;
25 }
26 }
27
28 if (autoSaveTimer != null)
29 clearTimeout(autoSaveTimer);
30 while (in_asend); <=== This is the stuck line
31 submitted = true;
32 return true;
33 }
I presume that in_asend is supposed to get changed from false to true asynchronously, by some other parallel communication with the server. But that doesn't seem to be happening.
Does this look like an issue with the e-Log distribution? Or is there a configuration issue with our e-Log server which we could improve?
|
|
|
|
|