On 01/22/2011 08:50 PM, Gerd Lorscheid wrote: > Hello, > > you are right, what I did is the same as a dentist will do when you come at > the weekend. This is what I did and what I solved, because there was my > actual pain: > >>> Now if you do the following: >>> * open two bases with trees >>> * create a new game in one base, insert moves but do not save >>> * switch to the other base and back. >>> Your entered game is lost. > I think it is easy to reproduce, what happened before and after my patch. > > What your dentist will do when he has time and you have money I have > described also below.
I resign. Joost. > Gerd > > > > > -----Ursprüngliche Nachricht----- > Von: Joost 't Hart [mailto:joost.t.h...@planet.nl] > Gesendet: Samstag, 22. Januar 2011 20:25 > An: Gerd Lorscheid > Cc: 'Scid Users List' > Betreff: Re: AW: AW: [Scid-users] Potential data loss using trees > > On 01/22/2011 07:33 PM, Gerd Lorscheid wrote: > > Hi! > >> Hi, >> >> as I said. This is most probably not the only place where an unsaved game > is >> overwritten. > Please do understand that this /is/ the place where my game is > overwritten, but that your protection mechanism (based on > sc_game_number() !=0&& sc_game_altered() == false ) does not work in my > case. In my case, the observer functions simply do not refer to the > actual state of affairs! > > And that I do not understand either why it works for you. Did you maybe > "alter" the running game in /both/ dBases? > > I am not unwilling at all to commit your patch (believe me), but I am > afraid that it may hide the real problem - which will consequently be > harder to track down in ~some~ future. > > Cheers, > Joost. > >> But in the use case I described when I submitted this fix this >> location did overwrite an unsaved game. So I prevented it. >> Basically there should be a routine in tcl to switch a game and this > should >> be used whenever the game is changed to ensure that nothing get lost. If >> there is no problem then this will not change anything except make it 0.05 >> seconds slower. But if there is a problem the user has a chance to save > his >> work or prevent the switch. The call "sc_game load" is called more than 20 >> times in the tcl code, so volunteers are searched to have a look for each > of >> them and then the problem is gone. >> >> Gerd >> >> >> -----Ursprüngliche Nachricht----- >> Von: Joost 't Hart [mailto:joost.t.h...@planet.nl] >> Gesendet: Samstag, 22. Januar 2011 19:15 >> An: Gerd Lorscheid >> Cc: 'Scid Users List' >> Betreff: Re: AW: [Scid-users] Potential data loss using trees >> >> On 01/22/2011 04:36 PM, Gerd Lorscheid wrote: >>> Hello, >>> >>> I cannot solve all problems with one small fix. >> Probably true, but I do not think that anybody was expecting this. >> >>> The location, which I fixed >>> did overwrite an unsaved game without warning. This is what I prevented >> and >>> there is no alternative. >> Hm. >> >> Can you explain why your patch works? The sc_game * operations /should/ >> operate on a different game than the running game in the running base >> after you temporarily sc_base switch-ed to the tree base. Right? >> >> That is why I think there is a threading problem at hand. >> >> I analyzed a bit further. In my scenario I create a new game _after_ the >> tree base has been opened, but before the tree refresh is completed for >> the first time. Surprisingly the sc_game operations do not refer to my >> new game at all. The thread doing the tree refreshing seems to be >> unaware that I did create this new game. >> If I create the new game before opening the base-as-tree, the problem >> does not show... >> >> Cheers, >> Joost. >> >>> There may be other locations doing the same. It may >>> be worth to check every place where the game is changed (to the first of >> the >>> filter) without warning. If any feature has a problem with my small fix, >> its >>> implementation has to be fixed because then its built on wrong >> assumptions. >>> Gerd >>> >>> >>> >>> -----Ursprüngliche Nachricht----- >>> Von: Joost 't Hart [mailto:joost.t.h...@planet.nl] >>> Gesendet: Samstag, 22. Januar 2011 12:35 >>> An: Gerd Lorscheid >>> Cc: 'Scid Users List' >>> Betreff: Re: [Scid-users] Potential data loss using trees >>> >>> Hi, >>> >>> I suggest we analyze this issue a bit further... >>> >>> On 10/08/2010 06:20 PM, Joost 't Hart wrote: >>>> Hi! >>>> >>>> [Linux, CVS] >>>> >>>> 1a) Open a dbase in which you want to add a new game >>>> 2a) Open-as-tree some big reference database (~4M games, dunno if size >>>> matters here) >>>> >>>> Do NOT wait for (2a) - which is concluded by the complete tree list of >>>> statistics - to complete >>>> >>>> 1b) Start a new game (hit Ctrl-X) >>>> 2b) Make a few moves on the board >>>> 3b) Wait for (2a) to complete. >>>> >>>> Kaboom! Running game is destroyed, board returns to game#1 of your > dbase. >>>> Cheers, >>>> Joost. >>> Gerd, your suggestion does not resolve the problem above. >>> >>> After tree completion I am still sent back at game#1 of dBase. >>> >>> But there /is/ a change: >>> >>> When I exit Scid at this point, Scid produces an "unsaved game warning" >>> and it appears that my new game is not entirely lost (as it was), but >>> added as a new game to the tree base. >>> >>> Hm... >>> >>> Cheers, >>> Joost. >>> >>> >>> On 01/19/2011 09:03 PM, Gerd Lorscheid wrote: >>>> Hello, >>>> >>>> at the end of ::tree::dorefresh you find the following code: >>>> >>>> >>>> # if the Tree base is not the current one, updates the Tree base to >> the >>>> first game in filter : that way it is possible to >>>> # directly generate an opening report for example >>>> if {$baseNumber != [sc_base current] } { >>>> set current [sc_base current] >>>> sc_base switch $baseNumber >>>> if { [sc_filter first] != 0 } { >>>> sc_game load [sc_filter first] >>>> } >>>> sc_base switch $current >>>> >>>> >>>> Now if you do the following: >>>> * open two bases with trees >>>> * create a new game in one base, insert moves but do not save >>>> * switch to the other base and back. >>>> Your entered game is lost. >>>> >>>> The following replacement should prevent this. >>>> >>>> >>>> # if the Tree base is not the current one, updates the Tree base to >> the >>>> first game in filter : that way it is possible to >>>> # directly generate an opening report for example >>>> if {$baseNumber != [sc_base current] } { >>>> set current [sc_base current] >>>> sc_base switch $baseNumber >>>> if { [sc_filter first] != 0 } { >>>> if { [sc_game number] != 0 } { >>>> if { [sc_game altered] == 0 } { >>>> sc_game load [sc_filter first] >>>> } >>>> } >>>> } >>>> sc_base switch $current >>>> >>>> >>>> Somebody should check it and check it in. >>>> >>>> Gerd >>>> >>>> >>>> >>>> > ---------------------------------------------------------------------------- >>> -- >>>> Protect Your Site and Customers from Malware Attacks >>>> Learn about various malware tactics and how to avoid them. Understand >>>> malware threats, the impact they can have on your business, and how you >>>> can protect your company and customers by using code signing. >>>> http://p.sf.net/sfu/oracle-sfdevnl >>>> _______________________________________________ >>>> Scid-users mailing list >>>> Scid-users@lists.sourceforge.net >>>> https://lists.sourceforge.net/lists/listinfo/scid-users >>>> >> > > ------------------------------------------------------------------------------ Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)! Finally, a world-class log management solution at an even better price-free! Download using promo code Free_Logger_4_Dev2Dev. Offer expires February 28th, so secure your free ArcSight Logger TODAY! http://p.sf.net/sfu/arcsight-sfd2d _______________________________________________ Scid-users mailing list Scid-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/scid-users