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

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;




            
阅读更多
文章标签: destructor
个人分类: VCL
想对作者说点什么? 我来说一句

Delphi的TScreen类

Delphi的TScreen类

shuaihj shuaihj

2011-01-09 22:46:00

阅读数:4495

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭