关闭

关于TScreen::TDataModule没有互斥,在Datasnap中引出的BUG

335人阅读 评论(0) 收藏 举报

Datasnap中的TDSServerModule是继承于TDataModule,TDSServerModule实例的Destory,没有做互斥


destructor TDSServerModuleBase.Destroy;
begin
  //TDataModule
  if OldCreateOrder then DoDestroy;
  if Assigned(RemoveDataModule) then
    RemoveDataModule(Self);
  //TComponent
  Destroying;
  RemoveFreeNotifications;
  DestroyComponents;
  // TPersistent
  RemoveFixups(Self);
  //TProviderDataModule
  CleanProviders;
end;


 RemoveDataModule(Self);

解决方法:

对全局的Classes.RemoveDataModule的函数重新赋值自己写的RemoveDataModuleFix,并在函数内互斥

procedure TDataModuleFix.RemoveDataModuleFix(DataModule: TDataModule);
begin
  GlobalNameSpace.BeginWrite;
  try
    g_SaveRemoveDataModule(DataModule);
  finally
    GlobalNameSpace.EndWrite;
  end;
end;




   
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:9839次
    • 积分:199
    • 等级:
    • 排名:千里之外
    • 原创:11篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类